Spec-Zone.ru › C++

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 — это обёртка, содержащая динамически выделяемый объект со семантикой значения.
2) std::pmr::indirect — это псевдоним шаблона, использующий полиморфный аллокатор.

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

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

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

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

T - тип принадлежащего объекту значения
Allocator - тип связанного аллокатора
Требования к типам
-T может быть неполным типом.
-Если T является одним из следующих типов, программа некорректна:
  • не-объектный тип
  • тип массива
  • std::in_place_t
  • специализация std::in_place_type_t
  • тип с квалификатором cv
-Если 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 связанный аллокатор
(объект-член, используемый только для описания*)

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

(constructor)
создаёт объект indirect
(открытая функция-член)
(destructor)
уничтожает принадлежащее значение, если оно есть
(открытая функция-член)
operator=
присваивает содержимое
(открытая функция-член)
Наблюдатели
operator->operator*
предоставляют доступ к принадлежащему значению
(открытая функция-член)
valueless_after_move
проверяет, не имеет ли indirect значения
(открытая функция-член)
get_allocator
возвращает связанный аллокатор
(открытая функция-член)
Модификаторы
swap
обменивает содержимое
(открытая функция-член)

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

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

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

std::hash<std::indirect>
(C++26)
поддержка хеширования для std::indirect
(специализация шаблона класса)

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

Примечания

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

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/indirect

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API