Boost.Asio の例を読んでいるときに偶然この例に遭遇しましたenable_shared_from_this
が、ドキュメントを読んでも、これを正しく使用する方法がまだわかりません。このクラスを使用する意味がある例と説明を誰か教えていただけませんか。
ベストアンサー1
これによって、しか持っていない場合でもshared_ptr
への有効なインスタンスを取得できます。これがなければ、をメンバーとして持っていない限り、への を取得する方法はありません。this
this
shared_ptr
this
enable_shared_from_this の boost ドキュメント:
class Y: public enable_shared_from_this<Y>
{
public:
shared_ptr<Y> f()
{
return shared_from_this();
}
}
int main()
{
shared_ptr<Y> p(new Y);
shared_ptr<Y> q = p->f();
assert(p == q);
assert(!(p < q || q < p)); // p and q must share ownership
}
メソッドは、メンバー インスタンスがない場合でも、f()
有効な を返します。次のように単純に実行できないことに注意してください。shared_ptr
class Y: public enable_shared_from_this<Y>
{
public:
shared_ptr<Y> f()
{
return shared_ptr<Y>(this);
}
}
これによって返される共有ポインターは、「適切な」参照カウントとは異なる参照カウントを持ち、オブジェクトが削除されると、そのうちの 1 つが失われ、ぶら下がった参照が保持されることになります。
enable_shared_from_this
C++ 11 標準の一部になりました。boost だけでなくそこからも取得できます。