enable_shared_from_this とは何ですか?また、なぜ便利ですか?
概要
Boost を探索しているとき。 Asio の例では、enable_shared_from_this が表示され、困惑する場合があります。その適切な適用について。この記事は、このクラスの使用が適切な場合の包括的な説明と例を提供することを目的としています。
enable_shared_from_this について
enable_shared_from_this は、通常のクラスの変換を容易にするユーティリティ クラスです。有効なshared_ptrインスタンスへのポインタ(このような)。これがないと、shared_ptr がメンバー変数として明示的に格納されない限り、現在のオブジェクトへのshared_ptr へのアクセスは不可能になります。
例と説明
次の例を考えてみましょう。
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 のメンバー インスタンス。この変換は、enable_shared_from_this クラスによって許可されます。次のアプローチは正しくないことに注意することが重要です:
class Y : public enable_shared_from_this<Y> { public: shared_ptr<Y> f() { return shared_ptr<Y>(this); } };
これにより、異なる参照カウントを持つ共有ポインターが生成され、オブジェクトが削除されたときに潜在的なダングリング参照が発生する可能性があります。
結論
enable_shared_from_this は、shared_ptr インスタンスを作成するための貴重なツールです。現在のオブジェクト、通常のポインターのみにアクセスできる場合。これにより、ダングリング参照が防止され、適切なリソース管理が保証されます。この機能は、C 11 標準の一部としても利用できるようになりました。
以上が「enable_shared_from_this」とは何ですか?また、「shared_ptr」インスタンスを安全に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。