コンストラクターにおける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 サイトの他の関連記事を参照してください。