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 起)

通过修改后的 Pointer 对象值(若已调用 operator void ** ( ) 则为 void * 对象)及捕获的参数重置适配的 Smart 对象。

  • s 表示适配后的 Smart 对象,
  • args... 表示捕获的参数,
  • p 表示存储的 Pointer 值,或当 operator void ** 被调用时为 static_cast < Pointer > ( * 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 的特化版本,实现时可能会在构造过程中为新的控制块分配存储空间,以便将非抛出操作留给析构函数处理。

通过值捕获的参数在重置后会被销毁。