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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 21:00:04410ブラウズ

Why Can't `shared_from_this()` Be Used Directly in Constructors?

コンストラクターのshared_from_this() の制限を理解する

shared_from_this() の概念は、オブジェクトへの共有ポインタを確立するのに便利に見えるかもしれません。コンストラクター内で。ただし、直接使用できない技術的な制限があります。この問題を理解するために、基礎となるメカニズムを調べてみましょう:

パズル: 自己保存のshared_ptr と構築タイミング

書籍のリファレンスによると、shared_ptr はEnable_shared_from_this<> のプライベート メンバー人の基本クラス内。この混乱は、次の 2 つの重要な点から生じます。

  • 自己保存shared_ptr: 保存されるshared_ptrは、クラスの外部で作成された実際のshared_ptrです。
  • 構築タイミング:shared_ptr の保存は、人の構築プロセスの最後に発生します。

shared_from_this() がコンストラクターで制限されているのはなぜですか?

コンストラクターにおけるshared_from_this()の制限は、構築の逐次的な性質によるものです。 Person のコンストラクターが実行されている間、その Person オブジェクトをポイントできるshared_ptr はまだ作成されていません。 shared_ptr は、Person の構築後に外部で作成されます。

shared_from_this() の基礎となるメカニズム

enable_shared_from_this<>オブジェクト内に非表示のweak_ptrを確立する方法を提供します。このweak_ptrは、オブジェクトの外部で作成された最初のshared_ptrによって使用され、それ自体を初期化します。ただし、この初期化は、shared_ptr が外部で作成された場合にのみ発生します。

結論

shared_from_this() を使用すると、クラスの外部からオブジェクトへの共有ポインタを作成できますが、コンストラクター内での使用は、構築シーケンスによって制限されます。オブジェクトの構築が完了した後、shared_ptr を外部で作成する必要があります。これは、共有ポインタが正しく機能することを保証する技術的な制限です。

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

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