- 114 名前:デフォルトの名無しさん mailto:sage [2006/02/27(月) 00:42:51 ]
- >>113
いや、正しくデストラクタが呼ばれない。 108のAとBが仮装デストラクタを持っているとしてこういうコードがあったとする。 A *a = new B[10]; delete[] a; 仮にnew B[10]の結果(アドレス)が0x8000だったとする。 sizeof (B)は8だから要素はそれぞれ0x8000, 0x8008, 0x8010, ......, 0x8050に置かれることになる。 一方delete[] a;では開放する前にデストラクタを呼ぼうとする。 sizeof (A)は4だから各要素は0x8000, 0x8004, 0x8008, ......, 0x8028にあるとしてそれぞれデストラクタを呼ぼうとしてしまう。 だからいけない。
|

|