std::unique_ptr<T,Deleter>::release
来自cppreference.com
| |
(C++11 起) (constexpr since C++23) |
|
若存在,则释放被管理对象的所有权。
调用后 get() 返回 nullptr。
调用方负责清理该对象(例如使用 get_deleter())。
参数
(无)
返回值
指向被管理对象的指针,或若无被管理对象则为 nullptr,即调用前 get() 会返回的值。
示例
Run this code
#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
参阅
| 返回指向被管理对象的指针 (公开成员函数) | |
| 返回用于析构被管理对象的删除器 (公开成员函数) | |
| 替换被管理对象 (公开成员函数) |