在C++中,为什么用基类指针Ap建立派生类动态对象,用delete删除对象时,只调用基类的析构函数呢??

时间:2013.11.16 发布人:tiaorizi_iqfnb

在C++中,为什么用基类指针Ap建立派生类动态对象,用delete删除对象时,只调用基类的析构函数呢??

已解决问题

谷歌tiaorizi_iqfnb用户在2013.11.16提交了关于“格式工厂在C++中,为什么用基类指针Ap建立派生类动态对象,用delete删除对象时,只调用基类的析构函数呢??”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-09-07T19:47:10。然后用派生类指针建立动态对象时,却能够正确调用派生类自己的和基类的析构函数呢?

#include<iostream>usingnamespacestd;classA{public:~A(){cout<<"A::~A()iscalled.\n";}};classB:publicA{public:~B(){cout<<"B::~B()iscalled.\n";}};intmain(){A*Ap=newB;B*Bp2=newB;cout<<"deletefirstobject:\n";deleteAp;cout<<"deletesecondobject:\n";deleteBp2;}希望大家能够帮助她。

详细问题描述及疑问:然后用派生类指针建立动态对象时,却能够正确调用派生类自己的和基类的析构函数呢?

#include<iostream>usingnamespacestd;classA{public:~A(){cout<<"A::~A()iscalled.\n";}};classB:publicA{public:~B(){cout<<"B::~B()iscalled.\n";}};intmain(){A*Ap=newB;B*Bp2=newB;cout<<"deletefirstobject:\n";deleteAp;cout<<"deletesecondobject:\n";deleteBp2;}期待您的答案,当代劳模,所有人都应该向你学习 !

希望以下的回答,能够帮助你。

第1个回答

用户名:父母離婚  

如果函数不是virtual的,则进行的是静态绑定,即在编译期间就决定了其调用的函数。

对于上面的程序来说,deleteBp2;,即使基类指针Bp2实际上概销植做种屋成常要势压指向的是派生类对象,但问答是编译器也会把这个基类指针和指向类型(基类)的析构函数进行静态绑定,从而达不到调用派生类析构函数的目的。