名前空間
変種
操作

std::enable_shared_from_this<T>::shared_from_this

From cppreference.com
 
 
メモリ管理ライブラリ
(説明用*)
未初期化メモリのアルゴリズム
(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まで*)
明示的な生存期間管理
 
 
std::shared_ptr<T> shared_from_this() ;
(1) (C++11以降)
std::shared_ptr<T const> shared_from_this() const ;
(2) (C++11以降)

既存のすべての `*this` を指す `std::shared_ptr` と所有権を共有する `std::shared_ptr<T>` を返します。

目次

[編集] 戻り値

std::shared_ptr<T>( weak_this )

[編集] 例外

まだ `std::shared_ptr` によって共有されていないオブジェクトに対して `shared_from_this` が呼び出された場合、`std::shared_ptr` コンストラクタによって `std::bad_weak_ptr` がスローされます。

[編集]

#include <iostream>
#include <memory>
 
struct Foo : public std::enable_shared_from_this<Foo>
{
    Foo() { std::cout << "Foo::Foo\n"; }
    ~Foo() { std::cout << "Foo::~Foo\n"; } 
    std::shared_ptr<Foo> getFoo() { return shared_from_this(); }
};
 
int main()
{
    Foo *f = new Foo;
    std::shared_ptr<Foo> pf1;
 
    {
        std::shared_ptr<Foo> pf2(f);
        pf1 = pf2->getFoo(); // shares ownership of object with pf2
    }
 
    std::cout << "pf2 is gone\n";   
}

出力

Foo::Foo
pf2 is gone
Foo::~Foo

[編集] 関連項目

オブジェクトの所有権を共有するセマンティクスを持つスマートポインタ
(クラステンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)