虚析构函数?

l_y_s 2004-10-22 11:22:58


虚析构函数是怎么定义的?
有什么功能?
为什么要它?
构造函数为什么不可以为虚构造函数?
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjh1982 2004-10-22
  • 打赏
  • 举报
回复
可以用基类指针正常删除派生类.
kenyle 2004-10-22
  • 打赏
  • 举报
回复
思考ing
freshairfly 2004-10-22
  • 打赏
  • 举报
回复
1、如果一个类定义了虚析构函数就说明这个类可以被继承
ClassBase *base = new ClassFromBase;
(ClassFromBase从ClassBase继承);
delete base时,如果ClassBase的析构函数为虚函数,则先调用ClassFromBase的析构函数,然后再调用ClassBase的析构函数
否则,只会调用ClassBase的析构函数

2、一个实例化一个类对象时,是要具体指定的,所以没必要使用多态(即虚构造函数),并且在派生类的构造函数里,会自动调用父类的缺省构造函数
wxsdragon 2004-10-22
  • 打赏
  • 举报
回复
virtual ~test();

因为同一个对象可以有不同的析构方式!

构造函数是在对象建立之前调用的.次是对象还不存在,所以不能用虚构造函数
alongfly 2004-10-22
  • 打赏
  • 举报
回复
在构造函数前还没有虚拟函数表,不能得到虚拟调用指针,所以构造函数不能为虚函数。
tsohg 2004-10-22
  • 打赏
  • 举报
回复
构造函数不可以用虚函数,具体为什么说不上来;

析构函数一般为虚函数:例如:
ClassBase * base=new ClassFromBase;
(ClassFromBase从ClassBase继承);
那么在delete base时,如果ClassBase的析构函数为虚函数,则调用ClassFromBase的析构函数;否则则调用ClassBase的析构函数!
charlescao 2004-10-22
  • 打赏
  • 举报
回复
1.派生类不继承基类的构造函数,因此将类构造函数声明为虚拟的没有什么意义
2.析构函数应当是虚拟函数,这样可以确保正确的析构函数序列被调用
daylove 2004-10-22
  • 打赏
  • 举报
回复
1、在析构函数前加 virtual 关键字。
2、同意: 回复人: yjh1982(血精灵) ( ) 信誉:105
3、大师说这样用才是好习惯
4、应该构造函数不可以被继承,所以没有必要为 virtual

64,683

社区成员

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

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