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

Mary-Kate Olsen
リリース: 2024-11-08 12:32:02
オリジナル
185 人が閲覧しました

Why Can't `shared_from_this` Be Used in a Constructor?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート