ホームページ > バックエンド開発 > C++ > C で「enable_shared_from_this」をいつ、どのように使用する必要がありますか?

C で「enable_shared_from_this」をいつ、どのように使用する必要がありますか?

Linda Hamilton
リリース: 2024-12-13 10:00:22
オリジナル
160 人が閲覧しました

When and How Should You Use `enable_shared_from_this` in C  ?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート