enable_shared_from_this はオブジェクトの所有権の維持にどのように役立ちますか?
Boost.Asio の例を調べているときに、enable_shared_from_this に遭遇したことがあるかもしれません。ドキュメントを参照したにもかかわらず、その使用法は依然として不明瞭です。ここでは、その目的を明確にするための包括的な説明と例を示します。
enable_shared_from_this を使用すると、オブジェクト自体 (this で表される) にのみアクセスできる場合に、オブジェクトの有効なshared_ptr インスタンスを作成できます。これがなければ、既にメンバーとして定義されていない限り、この Shared_ptr を取得することは不可能です。
次の例を考えてみましょう。
class Y: public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_from_this(); } };
ここで、メソッド f() は有効な値を返すことができます。メンバーインスタンスがない場合でも、shared_ptr。次のアプローチは失敗することに注意してください:
class Y: public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_ptr<Y>(this); } };
結果は、参照カウントが異なる 2 つのshared_ptr になります。オブジェクトが削除されると、そのうちの 1 つがダングリング参照になります。
enable_shared_from_this が C 11 標準の一部となり、そこからだけでなく Boost からもアクセスできるようになったことに注意することが重要です。
以上が「enable_shared_from_this」は C のシェアード ポインタ所有権の問題をどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。