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

std::out_ptr_t<Smart,Pointer,Args...>::~out_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::out_ptr_t
Функции-элементы
Функции, не являющиеся элементами
 
<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, реализация может выделить память для нового управляющего блока при построении, чтобы оставить деструктору работу, не связанную с генерацией исключения.

Аргументы, захваченные значением, уничтожаются после сброса.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.