广告
淘宝内部优惠券
当前位置: 开发异常方案库» C/C++ » c++

c++

开发异常方案库  收集整理于:2021-02-08 15:29:00  浏览:66次
#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";
	}

------网友观点--------------------
是的我是初学。非常感谢
------网友观点--------------------

------网友观点--------------------

------网友观点--------------------

------网友观点--------------------
发布此文章仅为传递网友分享,不代表本站观点,若侵权请联系我们删除,本站将不对此承担任何责任。
软件开发 程序错误 异常 ybaby.netCopyright © 2020-2026  ybaby 版权所有  桂ICP备17004385号-2 网站地图