std::indirect
Определён в заголовочном файле <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 — это обёртка, содержащая динамически выделяемый объект со семантикой значения.Объект 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 | typenamestd::allocator_traits<Allocator>::pointer |
const_pointer | typenamestd::allocator_traits<Allocator>::const_pointer |
Поля данных
| Поле | Описание |
|---|---|
pointer p | указатель на принадлежащее значение (объект-член, используемый только для описания*) |
Allocator alloc | связанный аллокатор (объект-член, используемый только для описания*) |
Функции-члены
создаёт объект indirect (открытая функция-член) |
|
| уничтожает принадлежащее значение, если оно есть (открытая функция-член) |
|
| присваивает содержимое (открытая функция-член) |
|
Наблюдатели |
|
| предоставляют доступ к принадлежащему значению (открытая функция-член) |
|
проверяет, не имеет ли indirect значения (открытая функция-член) |
|
| возвращает связанный аллокатор (открытая функция-член) |
|
Модификаторы |
|
| обменивает содержимое (открытая функция-член) |
|
Функции, не являющиеся членами
|
(C++26)(C++26) | сравнивает объекты indirect (шаблон функции) |
|
(C++26) | специализирует алгоритм std::swap (шаблон функции) |
Вспомогательные классы
|
(C++26) | поддержка хеширования для std::indirect (специализация шаблона класса) |
Руководства по выводу типов
Примечания
| Макрос проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_indirect | 202502L | (C++26) |
std::indirect |
Пример
См. также
|
(C++26) | полиморфная обёртка, содержащая динамически выделяемый объект со семантикой значения (шаблон класса) |
|
(C++11) | умный указатель с семантикой единоличного владения объектом (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/indirect