std::unique_ptr<T,Deleter>:: release
From cppreference.net
<
cpp
|
memory
|
unique ptr
C++
Memory management library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
std::unique_ptr
| Member functions | ||||
| Modifiers | ||||
|
unique_ptr::release
|
||||
| Observers | ||||
| Non-member functions | ||||
|
(C++14)
(C++20)
|
||||
|
(until C++20)
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
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
参见
|
返回指向被管理对象的指针
(公开成员函数) |
|
|
返回用于销毁被管理对象的删除器
(公开成员函数) |
|
|
替换被管理的对象
(公开成员函数) |