Namespaces
Variants

std::unique_ptr<T,Deleter>:: release

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)
pointer release ( ) noexcept ;
(自 C++11 起)
(自 C++23 起为 constexpr)

释放被管理对象的所有权(如果存在)。

get() 在调用后返回 nullptr

调用方负责清理对象(例如通过使用 get_deleter() )。

目录

参数

(无)

返回值

指向被管理对象的指针,若不存在被管理对象(即调用前 get() 的返回值)则为 nullptr

示例

#include <cassert>
#include <iostream>
#include <memory>
struct Foo
{
    Foo() { std::cout << "Foo\n"; }
    ~Foo() { std::cout << "~Foo\n"; }
};
// 调用此函数时 Foo 资源的所有权会被转移
void legacy_api(Foo* owning_foo)
{
    std::cout << __func__ << '\n';
    // [无人理解或敢于修改的遗留代码]
    // [...]
    delete owning_foo;
}
int main()
{
    std::unique_ptr<Foo> managed_foo(new Foo);
    // [可能返回或抛出异常的代码]
    // [...]
    legacy_api(managed_foo.release());
    assert(managed_foo == nullptr);
}

输出:

Foo
legacy_api
~Foo

参见

返回指向被管理对象的指针
(公开成员函数)
返回用于销毁被管理对象的删除器
(公开成员函数)
替换被管理的对象
(公开成员函数)