std::out_ptr_t<Smart,Pointer,Args...>::~out_ptr_t
Материал из cppreference.com
<tbody>
</tbody>
~out_ptr_t(); |
(начиная с C++23) | |
Сбрасывает адаптированный объект Smart на значение модифицированного объекта Pointer (или объекта void*, если был вызван operator void**()) и захваченные аргументы.
Пусть
sобозначает адаптированный объектSmart,args...обозначает захваченные аргументы,pобозначает значение сохранённогоPointer, илиstatic_cast<Pointer>(*operator void**()), еслиoperator void**был вызван,SPбудетSmart::pointer, если он допустим и обозначает тип, иначеSmart::element_type*, еслиSmart::element_typeдопустим и обозначает тип, иначеstd::pointer_traits<Smart>::element_type*, еслиstd::pointer_traits<Smart>::element_typeдопустим и обозначает тип, иначеPointer.
Если s.reset(static_cast<SP>(p), std::forward<Args>(args)...) корректно, деструктор выполняет
if (p) s.reset(static_cast<SP>(p), std::forward<Args>(args)...);,
иначе, если std::is_constructible_v<Smart, SP, Args...> равно true, деструктор выполняет
if (p) s = Smart(static_cast<SP>(p), std::forward<Args>(args)...);,
иначе программа некорректна.
Примечание
Если Smart является специализацией std::shared_ptr, реализация может выделить память для нового управляющего блока при построении, чтобы оставить деструктору работу, не связанную с генерацией исключения.
Аргументы, захваченные значением, уничтожаются после сброса.