std::out_ptr_t<Smart,Pointer,Args...>::~out_ptr_t
~out_ptr_t(); |
(начиная с C++23) (constexpr начиная с C++26) |
Сбрасывает адаптированный объект Smart, используя значение изменённого объекта Pointer (или объект void*, если был вызван operatorvoid**()), а также захваченные аргументы.
Пусть
-
sобозначает адаптированный объектSmart, -
argsобозначает захваченные аргументы, -
pобозначает значение сохранённогоPointerилиstatic_cast<Pointer>(*operator void**()), если был вызван operatorvoid**, -
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/cpp/memory/out_ptr_t/~out_ptr_t