析构函数为什么可以是虚函数

sylvan_lee 2007-06-03 11:03:39
为什么析构函数可以为虚函数,而构造函数则不可以呢
析构函数做虚函数有什么好处呢?
...全文
800 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoshifang 2009-02-25
  • 打赏
  • 举报
回复
good
yydrewdrew 2007-06-03
  • 打赏
  • 举报
回复
析构函数一般要声明为虚函数,这样可以防止内存泄露
cangwu_lee 2007-06-03
  • 打赏
  • 举报
回复
表示已经参与
femalelover 2007-06-03
  • 打赏
  • 举报
回复
好像在Stan Lippman的<<Inside the C++ Object Model>>书上有讲这一系列动作顺序的.
femalelover 2007-06-03
  • 打赏
  • 举报
回复
其实说来说去, 是C++的标准问题. 楼上有兄弟说:

因为vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数
-----
粗看有一些道理, 但构造函数只会有运行时调用, 而vtbl在编译时就建造好了.
事实上, 建造vtbl的时机通常是析构函数被编译的时候, 至于构造函数与析构函数谁先编译, 真的是先编译构造函数吗, 这个我也不知道了.
femalelover 2007-06-03
  • 打赏
  • 举报
回复
为什么析构函数可以是虚函数?

这个常常是"如果一个类要用来做基类, 析构函数应该设置为virtual型", 这个其实完全在于使用各个对象能呈现多态: 基类的指针指向派生类对象, 从而该指针可以调用派生类的析构函数. 但有一点, 虚析构函数不同于普通的虚函数, 那就是编译器会在派生类虚构函数中调用基类的析构函数.
ljx_cug 2007-06-03
  • 打赏
  • 举报
回复
析构函数定义成虚函数的作用
ljx_cug() ( ) 信誉:100 Blog 加为好友 2007-06-03 11:39:19 得分: 0


补充一下
关于析构函数的作用:
在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。



ljx_cug 2007-06-03
  • 打赏
  • 举报
回复
补充一下
关于析构函数的作用:
在类的继承中,如果有基类指针指向派生类,那么用基类指针delete时,如果不定义成虚函数,派生类中派生的那部分无法析构。
femalelover 2007-06-03
  • 打赏
  • 举报
回复
为什么构造函数不可以为虚函数?

虚函数的主要意义在于被派生类继承从而产生多态. 派生类的构造函数中, 编译器会加入构造基类的代码, 如果基类的构造函数用到参数, 则派生类在其构造函数的初始化列表中必须为基类给出参数, 就是这个原因.
lsd1025 2007-06-03
  • 打赏
  • 举报
回复
同意ls的ls的说法.
VCLIFE 2007-06-03
  • 打赏
  • 举报
回复
学习
ljx_cug 2007-06-03
  • 打赏
  • 举报
回复
因为vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数
celftj 2007-06-03
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5527/5527204.xml?temp=.4950067
likexin 2007-06-03
  • 打赏
  • 举报
回复
当你用指向基类的指针指向派生类时如果通过指针删除该对象的话,应该呈现动态绑定,删除派生类的对象,就是说调用派生类的析构函数

65,060

社区成员

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

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