std::enable_shared_from_this<T>::shared_from_this
From cppreference.com
< cpp | memory | enable_shared_from_this
| 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
[編集] 関連項目
| (C++11) |
オブジェクトの所有権を共有するセマンティクスを持つスマートポインタ (クラステンプレート) |