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