std::unique_ptr<T,Deleter>::release
From cppreference.com
< cpp | memory | unique ptr
| pointer release() noexcept; |
(C++11以降) (C++23 以降 constexpr) |
|
管理しているオブジェクトの所有権を(もしあれば)解放します。
get() は呼び出し後、nullptr を返します。
呼び出し元は、オブジェクトのクリーンアップ(例:get_deleter() の使用)に責任を持ちます。
目次 |
[編集] パラメータ
(なし)
[編集] 戻り値
管理されているオブジェクトへのポインタ、または管理されているオブジェクトがなかった場合は nullptr 。これは、呼び出し前の get() が返す値と同じです。
[編集] 例
このコードを実行
#include <cassert> #include <iostream> #include <memory> struct Foo { Foo() { std::cout << "Foo\n"; } ~Foo() { std::cout << "~Foo\n"; } }; // Ownership of the Foo resource is transferred when calling this function void legacy_api(Foo* owning_foo) { std::cout << __func__ << '\n'; // [legacy code that no one understands or dares touch anymore] // [...] delete owning_foo; } int main() { std::unique_ptr<Foo> managed_foo(new Foo); // [code that might return or throw or some such] // [...] legacy_api(managed_foo.release()); assert(managed_foo == nullptr); }
出力
Foo legacy_api ~Foo
[編集] 関連項目
| 管理対象オブジェクトへのポインタを返す (public メンバ関数) | |
| 管理対象オブジェクトの破棄に使用されるデリータを返す (public member function) | |
| 管理対象オブジェクトを置き換える (public member function) |