は、私が持っていると言う:C++でアプリケーション上で「this」インスタンスを共有するにはどうすればよいですか?
class Foo
{
public:
Foo(std::function< void(std::shared_ptr<Foo>) > callback);
void shareMyFoo()
{
callback(std::make_shared<Foo>(this));
}
....
};
shareMyFoo()
が呼び出されると、誰かが共有ポインタをコピーする機会を持つことになります。残念ながら、それは死ぬだろう - つまり、そのrefカウンタが0に落ちた、それは私のFooを殺すでしょう。私はFoo
が自殺しないようにしたいと思います。
フィールドstd::shared_ptr<Foo> sharedSelf_
をFoo
に入れると思っていましたが、これはコンストラクタで初期化しますが、それも安いです。
は、より一般的に、私はインスタンス化想像すると(例えばauto foo = std::make_shared<Foo>()
)、共有ポインタ内のオブジェクトへのポインタを格納し、以降のインスタンスは、共有ポインタとして自身を通過することを望みます。 refカウンタをグローバルに更新するにはどうすればよいですか?
N.B.:私の署名/私のshared_ptr引数を自分のアプリケーションに保存したい/したい。
を見て! –
'auto p =(new Foo) - > shared_from_this();'それは何ですか? – ronag
* *はN3242のコード例です。 – spraff