コンストラクターで Shared_from_this が使用できないことを理解する
このクエリは、クラス コンストラクター内でのshared_from_thisの使用の制限に焦点を当てています。これに対処するために、この制限の背後にある技術的な理由を調べてみましょう。
Shared_ptr の非表示メンバー
Shared_from_this は自己参照であり、 Enable_shared_from_this 基本クラス。ただし、このweak_ptrは、Personalへの最初のshared_ptrが作成された後にのみ設定されます。
構築タイムライン
クラスのコンストラクターは、enable_shared_from_thisの構築を含む、そのメンバーの初期化を担当します。基本クラスのインスタンス。最初のオブジェクト構築中は、人物を指すshared_ptrはまだありません。
Shared_ptrとWeak_ptrの間の接続
次のスニペットを考えてみましょう:
std::shared_ptr<Person> p(new Person());
p のコンストラクター (shared_ptr) が呼び出される前に、式 new Person() が評価され、それによって Person オブジェクトが構築される必要があります。 shared_ptr のコンストラクターは person オブジェクトの作成後に実行されるため、shared_ptr オブジェクトは Person のコンストラクター段階では存在せず、shared_from_this の使用は不可能になります。
結論
技術的には、内部のweak_ptrを初期化する必要なshared_ptrは、オブジェクトが完全に構築されるまで存在しないため、shared_from_thisはコンストラクター内では使用できません。これにより、shared_from_this が必要な自己参照接続を確立できなくなります。
以上がコンストラクターで「shared_from_this」を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。