关于基类的虚析构函数

xiaobing307 2014-12-15 07:54:40
比如说下面的代码:
class A{
public:
virtual ~A(){ cout << "A::destructor" << endl;}
};
class B : public A{
public:
~B(){ cout << "B::destructor" << endl;}
};
B类并没有重写~A()函数,但是A* p = new B();delete p;会先调用~B(),然后调用~A(),如果按照虚函数的语义,delete p时,编译器不应该去找B类中是否重写了~A()函数么。那在处理虚析构函数时,岂不是与普通虚函数不一致?
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bear234 2014-12-15
  • 打赏
  • 举报
回复
编译器对析构函数的处理是比较特殊的 你记住就可以了 只要在基类里把析构函数声明成virtual的,就可以正常调用析构函数 一个子类其实是一个基类 加 一些新的成员 所以其实子类里也一定有基类的析构函数 总之编译器有办法让它正常运行
qq120848369 2014-12-15
  • 打赏
  • 举报
回复
析构函数不需要和基类是一个函数名。
DoDoMouse 2014-12-15
  • 打赏
  • 举报
回复
构造函数中是先构造基类,然后再子类 析构函数刚好反一下,先析构子类,然后再基类

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧