名前空間
変種
操作

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

From cppreference.com
< cpp‎ | memory‎ | unique ptr
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(C++17)
(C++17)
(C++17)
制約付き未初期化
メモリアルゴリズム
Cライブラリ

アロケータ
メモリリソース
ガベージコレクションのサポート
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
(C++11)(C++23まで)
未初期化ストレージ
(C++20まで*)
(C++20まで*)
明示的な生存期間管理
 
 
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) [編集]
English 日本語 中文(简体) 中文(繁體)