BaseClass * p = new DerivedClass();
delete p;
2行目は、仮想デストラクタがない場合は基本クラスのデストラクタを呼び出し、存在する場合は派生クラスのデストラクタを呼び出しますがdelete
、メモリを適切に解放します(たとえば、BaseClass
のオブジェクトが8バイトのスペースを占有し、DerivedClass
の 12 - 8 バイトまたは 12 バイトを解放し、どちらの場合もオブジェクトを削除しますか?
BaseClass * p = new DerivedClass();
delete p;
2行目は、仮想デストラクタがない場合は基本クラスのデストラクタを呼び出し、存在する場合は派生クラスのデストラクタを呼び出しますがdelete
、メモリを適切に解放します(たとえば、BaseClass
のオブジェクトが8バイトのスペースを占有し、DerivedClass
の 12 - 8 バイトまたは 12 バイトを解放し、どちらの場合もオブジェクトを削除しますか?