次の階層がある場合:
- クラス F には、型のメンバー オブジェクトが含まれます (クラス E およびクラス D、この順序で宣言されます)。
- クラス F は具体的なクラス クラス C を継承します
- クラス C は、抽象/純粋仮想クラス クラス B を継承します
- クラス B は具体的なクラス クラス A を継承します
クラス F 型のオブジェクトのデストラクタが呼び出されると、次のことが次の順序で行われます。
- クラス F (最も派生した) デストラクタが呼び出され、終了します
- クラス D (メンバー オブジェクト 2) のデストラクタが呼び出されて終了する
- クラス E (メンバー オブジェクト 1) のデストラクタが呼び出されて終了する
- クラス C (F のベース) デストラクタが呼び出されて終了する
- クラスA(CのベースであるBのベース)デストラクタが呼び出され、終了します
- クラス B (仮想、C のベース) デストラクタが呼び出され、終了します
これは正しいです?つまり、基本的に終わりに向かって、C は仮想 B を継承し、仮想 B は A を継承しますが、C は破壊され、次に A、次に仮想 B になりますか?
編集: C++ FAQ は言う:
「仮想基本クラスは特別です。それらのデストラクタは、最も派生したクラスのコンストラクタの最後で呼び出されます」
私が理解しようとしているのはどれですか?