#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
cout<<"父类的构造函数\n";
}
~Base()
{
cout<<"父类的析构函数\n";
}
};
class Derive:public Base
{
public:
Derive()
{
cout<<"子类的构造函数\n";
}
~Derive()
{
cout<<"子类的析构函数\n";
}
};
int main()
{
Base *pBase=new Derive();
delete pBase;
return 0;
}
为什么不执行子类的析构函数。会的可以讲详细点嘛

谢谢啦
将父类的析构函数,写成虚析构,你用了多态,就要用虚析构。不然你delete指向派生类对象的基类指针会产生未定义行为。
简单来说就是多态是运行时确定函数地址,如果你没有写成虚析构,那么pBase这个对象删除时默认调用的就是这个类本身的析构函数,并不会调用子类的析构函数。
如果你写成虚析构,其里面的虚函数表指针就有了子类的析构函数的地址,就会在运行时,根据你子类的类型来确认到底如何调用析构函数,以及调用的顺序。
具体原理有关虚函数表和虚函数表指针。(楼主初学的话,就没必要去深挖太多,
直接背下来要多态时,父类的析构必须写成虚析构既可,当然,你有兴趣可以看看这个文章,讲的非常详细
https://www.zhihu.com/question/389546003/answer/1194780618)
具体改法为加上virtual
virtual~Base()
{
cout << "父类的析构函数\n";
}