std::out_ptr_t<Smart,Pointer,Args...>::~out_ptr_t
~out_ptr_t(); | (since 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, реализация может выделить память для нового управляющего блока при создании, чтобы оставить небросковые операции для деструктора.
Аргументы, захваченные по значению, уничтожаются после сброса.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/out_ptr_t/%7Eout_ptr_t