ホームページ > バックエンド開発 > C++ > コンストラクターで「shared_from_this()」を使用できないのはなぜですか?

コンストラクターで「shared_from_this()」を使用できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-06 15:35:02
オリジナル
544 人が閲覧しました

Why Can't You Use `shared_from_this()` in Constructors?

コンストラクターにおけるshared_from_thisの制限を理解する

「C標準ライブラリ」からの抜粋で述べたように、shared_from_this()は技術的な問題に直面しています。コンストラクター内の制限。この概念を理解するには、shared_from_this() の内部動作を詳しく調べることが不可欠です。

shared_from_this における弱いポインタの役割

shared_from_this() は内部weak_ptr は、作成されたオブジェクトへの弱い参照を維持します。この弱いポインタは、そのオブジェクトに対して強力なshared_ptr(オブジェクトを所有するshared_ptr)が作成されるまで初期化されないままになります。最初のshared_ptrがインスタンス化された後でのみ、オブジェクトの基本クラスであるenable_shared_from_thisがこのshared_ptrにアクセスし、weak_ptrを初期化できます。

構築タイミングの問題

この依存関係は既存のshared_ptrsはコンストラクターに問題を引き起こします。コンストラクターが呼び出されるとき、構築されるオブジェクトを指すshared_ptrはまだ存在しません。したがって、構築中、enable_shared_from_this はweak_ptr を初期化できず、shared_from_this() をコンストラクター内で使用できなくなります。

説明のための例

次のコード スニペットを考えてみましょう。

class Person : public std::enable_shared_from_this<Person> {
   ...
};

std::shared_ptr<Person> p(new Person());
ログイン後にコピー

この例では、person() のコンストラクターは、shared_ptr p のコンストラクターの前に実行されます。これは、 Person() コンストラクター中に、 Person オブジェクトを指すshared_ptr が存在しないことを意味し、enable_shared_from_this がそのweak_ptrを初期化し、コンストラクター内でshared_from_this() にアクセスできないようにすることを禁止します。

以上がコンストラクターで「shared_from_this()」を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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