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

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

DDD
DDDオリジナル
2024-11-06 06:14:02715ブラウズ

Why Can't You Use `shared_from_this` in a Constructor?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。