Пространства имён
Варианты
Действия

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

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
std::inout_ptr_t
Функции-элементы
Функции, не являющиеся элементами
 
<tbody> </tbody>
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 является интрузивным указателем с блоком управления, выделение для нового блока управления может быть выполнено в конструкторе, а не в деструкторе.

Пример