回答編集履歴
1
fix typo
answer
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
という訳で、C++言語仕様の通りです。
|
8
8
|
|
9
|
+
----
|
9
10
|
> また以下は、CBaseのデストラクタを、非仮想デストラクタにして実行した結果です。
|
10
11
|
> (中略)
|
11
12
|
> なぜ、CBaseのデストラクタが呼ばれるのでしょうか。
|
@@ -14,4 +15,4 @@
|
|
14
15
|
CSub* sub = new CSub1();
|
15
16
|
delete sub;
|
16
17
|
```
|
17
|
-
3番目の処理では、動的な型`CSub1`を持つオブジェクトを、静的な型`CSub`のポインタとして取り扱っています。対象の型が**非仮想(non-virtual)**なデストラクタを持つ場合、コンパイラは**静的な型**のクラス継承ツリーを遡って`CSub::~CSub()`→`CBase::CBase()`と呼び出しを行います。
|
18
|
+
3番目の処理では、動的な型`CSub1`を持つオブジェクトを、静的な型`CSub`のポインタとして取り扱っています。対象の型が**非仮想(non-virtual)**なデストラクタを持つ場合、コンパイラは**静的な型**のクラス継承ツリーを遡って`CSub::~CSub()`→`CBase::~CBase()`と呼び出しを行います。
|