Spec-Zone.ru › C++

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

Spec-Zone.ru

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