std::inout_ptr_t<Smart,Pointer,Args...>::inout_ptr_t
Материал из cppreference.com
<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 является интрузивным указателем с блоком управления, выделение для нового блока управления может быть выполнено в конструкторе, а не в деструкторе.
Пример
| Этот раздел не завершён Причина: нет примера |