为什么父类的析构函数定义成virtual后, delete pTest2 就会释放Derived的资源, 否则就只能释放Base的资源, 而delete pTest1就能释放Derived 和Base的资源
class Base
{
public:
~Base() {
cout << "Base destructor!" << endl;
};
};
class Derived: public Base
{
public:
~Derived() {
cout << "Derived destructor!" << endl;
};
};
int main() {
Derived *pTest1 = new Derived();
Base *pTest2 = new Derived();
delete pTest1;
delete pTest2;
return 0;
}
只能说 cpp 就是这么设计的. 你可说它(被)设计的不好.
sf上有个问题:什么时候不用 virtual destructor?
供参考
https://stackoverflow.com/que...
虚函数意味着每个分配的对象都会通过虚函数表指针增加内存开销。
因此,如果您的程序涉及分配大量的某些对象,那么为了节省每个对象的额外32位,值得避免所有虚函数。
在所有其他情况下,您将节省自己的调试痛苦,使析构函数虚拟化。