Namespaces
Variants

std:: indirect

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовке <memory>
template < class T, class Allocator = std:: allocator < T > >
class indirect ;
(1) (начиная с C++26)
namespace pmr {

template < class T >
using indirect = std :: indirect < T, std:: pmr :: polymorphic_allocator < T >> ;

}
(2) (начиная с C++26)
1) std::indirect — это обёртка, содержащая динамически выделенный объект с семантикой значения.
2) std::pmr::indirect является псевдонимом шаблона, который использует polymorphic allocator .

Объект std::indirect управляет временем жизни принадлежащего ему объекта. Объект std::indirect может не иметь принадлежащего объекта только после перемещения, в этом случае он является не имеющим значения .

Каждый объект типа std::indirect<T, Allocator> использует объект типа Allocator для выделения и освобождения памяти для управляемого объекта по мере необходимости.

Если программа объявляет явную или частичную специализацию std::indirect , поведение не определено.

Содержание

Параметры шаблона

T - тип владеемого объекта
Allocator - тип связанного аллокатора
Требования к типам
-
T может быть неполным типом .
-
Если T является одним из следующих типов, программа некорректна:
-
Если Allocator не удовлетворяет требованиям Allocator , программа некорректна.
-
Если std:: allocator_traits < Allocator > :: value_type не совпадает с типом T , программа некорректна.

Вложенные типы

Тип Определение
value_type T
allocator_type Allocator
pointer typename std:: allocator_traits < Allocator > :: pointer
const_pointer typename std:: allocator_traits < Allocator > :: const_pointer

Члены данных

Участник Описание
pointer p указатель на владеемое значение
( объект-член только для демонстрации* )
Allocator alloc связанный аллокатор
( объект-член только для демонстрации* )

Функции-члены

создает объект indirect
(public member function)
уничтожает хранимое значение, если оно есть
(public member function)
присваивает содержимое
(public member function)
Наблюдатели
получает доступ к хранимому значению
(public member function)
проверяет, является ли indirect пустым
(public member function)
возвращает связанный аллокатор
(public member function)
Модификаторы
обменивает содержимое
(public member function)

Функции, не являющиеся членами класса

(C++26) (C++26)
сравнивает indirect объекты
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)

Вспомогательные классы

Поддержка хеширования для std::indirect
(специализация шаблона класса)

Руководства по выводу

Примечания

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_indirect 202502L (C++26) std::indirect

Пример

Смотрите также

полиморфная обёртка, содержащая динамически выделяемый объект с семантикой значения
(шаблон класса)
(C++11)
умный указатель с семантикой уникального владения объектом
(шаблон класса)