Я использую компилятор GNU. Виртуальный деструктор в классе B не вызывает Destructor ~ D(). Может ли кто-нибудь сказать мне, почему?Виртуальный деструктор: не работает?
#include<iostream>
using namespace std;
class B {
double* pd;
public:
B() {
pd=new double [20];
cout<< "20 doubles allocated\n";
}
virtual ~B() { //the virtual destructor is not calling ~D()
delete[] pd;
cout<<"20 doubles deleted\n";
}
};
class D: public B {
int* pi;
public:
D():B() {
pi= new int [1000];
cout<< "1000 ints allocated\n";
}
~D() {
delete[] pi;
cout< "1000 ints deleted\n";
}
};
int main() {
B* p= new D; //new constructs a D object
Удалить должен вызвать виртуальный деструктор в классе B, но это не так.
delete p;
}
'cout <" 1000 ints deleted \ n ";' у вас есть опечатка – Borgleader
Это должно сработать (если оно скомпилировано, у вас есть тривиальная синтаксическая ошибка). Какие у вас есть доказательства, которых нет? – juanchopanza
Спасибо, ребята. –