shared_from_this コンストラクターの制限: 技術的な説明
一般的な誤解とは異なり、shared_from_this をコンストラクターで使用できないのは、技術的な制限に起因します。その理由を理解するために、その実装の内部を詳しく調べます。
shared_from_this は、weak_ptr を格納するために基本クラスのプライベート メンバー、enable_shared_from_this に依存します。ただし、このweak_ptrは構築プロセスの最後まで初期化されません。これは、派生クラス (例: Person) のコンストラクターが実行されているとき、オブジェクトを指すshared_ptr がまだ存在しないことを意味します。
これを説明するために、本書のコード スニペットを考えてみましょう。
class Person : public std::enable_shared_from_this<Person> { ... };
PERSON クラス内のshared_from_this関数は、タイプPERSONのオブジェクトを指す最初のshared_ptrを使用して、非表示のweak_ptrを初期化しようとします。ただし、Person のコンストラクターは現在実行中であるため、そのようなshared_ptr は存在しません。
この技術的な制限は、ポイントされたオブジェクトに対してアクションが実行される前にshared_ptrのコンストラクターを呼び出す必要があるために発生します。したがって、その段階では使用可能なshared_ptrが存在しないため、shared_from_thisメカニズムは派生クラスのコンストラクター内で動作できません。
以上がなぜコンストラクターで「shared_from_this」を使用できないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。