コンストラクターのshared_from_this() の制限を理解する
shared_from_this() の概念は、オブジェクトへの共有ポインタを確立するのに便利に見えるかもしれません。コンストラクター内で。ただし、直接使用できない技術的な制限があります。この問題を理解するために、基礎となるメカニズムを調べてみましょう:
パズル: 自己保存のshared_ptr と構築タイミング
書籍のリファレンスによると、shared_ptr はEnable_shared_from_this<> のプライベート メンバー人の基本クラス内。この混乱は、次の 2 つの重要な点から生じます。
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 サイトの他の関連記事を参照してください。