确定基类有虚析构函数
class A { public: A() { cout<<"A constructor"<
执行结果:
对此解释:C++语言标准规定,当通过基类指针删除派生类的对象,而基类又没有虚析构函数,结果是不确定的。
对此,将A的析构函数改为虚函数:
class A { public: A() { cout<<"A constructor"<
执行结果:
结果正确。
以上我们是在堆上分配的内存。
改写main函数,在栈上分配:
int main() { B b; return 0; }
结果同上。分配在栈上的对象自动调用构造函数与析构函数。