Namespaces
Variants

std::inout_ptr_t<Smart,Pointer,Args...>:: inout_ptr_t

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)
explicit inout_ptr_t ( Smart & sp, Args... args ) ;
(1) (начиная с C++23)
inout_ptr_t ( const inout_ptr_t & ) = delete ;
(2) (начиная с C++23)
1) Создает объект inout_ptr_t . Адаптирует sp , как если бы привязывал его к члену Smart & , захватывает каждый аргумент t в args... как если бы инициализировал соответствующий член типа T в Args... с помощью std:: forward < T > ( t ) , затем инициализирует сохраненный Pointer значением sp если Smart является типом указателя, в противном случае инициализирует его значением sp. get ( ) . sp. release ( ) может быть вызван если Smart не является типом указателя, в этом случае он не будет вызван повторно в деструкторе.
2) Конструктор копирования явно удален. inout_ptr_t не является копируемым или перемещаемым.

Содержание

Параметры

sp - объект (обычно умный указатель) для адаптации
args... - аргументы для захвата, используемые при сбросе

Возвращаемое значение

(нет)

Исключения

Может выбрасывать исключения, определяемые реализацией.

Примечания

Если Smart не является типом указателя и sp. release ( ) не вызывается конструктором, он может быть вызван деструктором перед сбросом sp .

Каждый аргумент в args... перемещается в созданный inout_ptr_t если он имеет объектный тип, или передаётся в созданный inout_ptr_t как есть, если он имеет ссылочный тип.

Конструктор inout_ptr_t может генерировать исключения. Например, когда sp является интрузивным указателем с блоком управления, выделение памяти для нового блока управления может выполняться в конструкторе, а не в деструкторе.

Пример