【发布时间】:2012-06-26 09:12:31
【问题描述】:
为什么下面的程序会崩溃?我有一个基类,它的析构函数不是虚拟的,但子类的析构函数是虚拟的:
#include <iostream>
class Base {
public:
Base() {
std::cout << "Base::Base CTOR " << std::endl;
}
~Base() {
std::cout << "Base::Base DTOR " << std::endl;
}
};
class Child : public Base {
public:
Child(){
std::cout << "Child::Child CTOR " << std::endl;
}
virtual ~Child() {
std::cout << "Child::Child DTOR " << std::endl;
}
};
int main (int argc, char **argv) {
Base *ptr = new Child;
delete ptr;
}
【问题讨论】:
-
基类析构函数应该是
virtual -
你应该让你的基类析构函数是虚拟的,更多细节请看这个链接parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7
-
它是在 或写入“Base::Base DTOR”之后崩溃还是从未写出?