C++ のゴールデン ルールの 1 つは、インスタンスの有効期間は、コンストラクターが正常に完了したときに始まり、デストラクターが開始されたときに終了するというものです。
このルールから、コンストラクターで仮想メソッドを呼び出すことはお勧めできません。派生インスタンスの可能性が無効であり、未定義の動作につながる可能性があるためです。
C++ FAQ 20.8で言及されている Virtual Constructor Idiomは、反対のことを示しているようです。
私の質問は:
- コンストラクタとデストラクタからの呼び出しに関連するオブジェクトの寿命を定義するための標準の正確な定義は何ですか?
- さらに、いわゆる「仮想コンストラクタ Idom」は有効ですか?