enable_shared_from_this の重要性を理解する
質問:
Boost.Asio の例を調べながら、多くの開発者は、enable_shared_from_this の概念に遭遇します。ドキュメントを読んでも、その実際の用途は不明のままです。このクラスの利用が適切な場合について、例を示して説明していただけますか?
回答:
enable_shared_from_this は、有効なshared_ptrインスタンスを「this」に取得する機能を付与します。 「これ」しかない状況で。この機能がない場合、「this」へのshared_ptrを取得するには、既にメンバーとして定義されている必要があります。
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。
単にshared_ptrを返すだけであることに注意することが重要です。 「this」を引数として構築することは、正当な「共有」参照カウントとは異なる参照カウントになるため、許容できる解決策ではありません。その結果、オブジェクトの削除時に共有ポインタの 1 つがダングリング参照になる可能性があります。
enable_shared_from_this は C 11 標準の一部となり、C 11 と Boost の両方からアクセスできるようになりました。
以上がC で「enable_shared_from_this」をいつ、どのように使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。