Spec-Zone.ru › C++

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API