Namespaces
Variants

std::out_ptr_t<Smart,Pointer,Args...>:: ~out_ptr_t

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
~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 , реализация может выделять память для нового блока управления при конструировании, чтобы оставить нетривиальные операции деструктору.

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