社区
C++ 语言
帖子详情
析构函数为什么可以是虚函数
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
打赏
举报
回复
当你用指向基类的指针指向派生类时如果通过指针删除该对象的话,应该呈现动态绑定,删除派生类的对象,就是说调用派生类的析构函数
为什么
析构函数
一般写成
虚函数
?
由于类的多态性,基类指针可以指向派生类的对象,如果删除该基类的指针,就会调用该指针指向的派生类
析构函数
,而派生类的
析构函数
又自动调用基类的
析构函数
,这样整个派生类的对象完全被释放。如果
析构函数
不被声明成
虚函数
,则编译器实施静态绑定,在删除基类指针时,只会调用基类的
析构函数
而不调用派生类
析构函数
,这样就会造成派生类对象析构不完全,造成内存泄漏。所以将
析构函数
声明为
虚函数
是十分必要的。在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生,要将基类的
析构函数
声明为
虚函数
。
为什么
析构函数
一般写成
虚函数
由于类的多态性,基类指针可以指向派生类的对象,如果删除该基类的指针,就会调用该指针指向的派生类
析构函数
,而派生类的
析构函数
又自动调用基类的
析构函数
,这样整个派生类的对象完全被释放。如果
析构函数
不被声明成
虚函数
,则编译器实施静态绑定,在删除基类指针时,只会调用基类的
析构函数
而不调用派生类
析构函数
,这样就会造成派生类对象析构不完全,造成内存泄漏。所以将
析构函数
声明为
虚函数
是十分必要的。在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生,要将基类的
析构函数
声明为
虚函数
。
析构函数
为什么是
虚函数
析构函数
为什么
虚函数
,不是
虚函数
又能怎么样呢,我们先来看个例子 class A { public: A() {}; ~A() { cout << "destruct A" << endl; }; }; class B :public A { public: B() {}; virtual ~B() { cout << "destruct B" << endl; } }; int main() { A* sa = new B;
为什么
析构函数
必须是
虚函数
?为什么默认的
析构函数
不是
虚函数
?
微信搜索“编程笔记本”,获取更多信息 ------------- codingbook2020 ------------- 今天我们来谈一谈面试 C++ 工程师时经常被谈到的一个问题:为什么
析构函数
必须是
虚函数
?为什么默认的
析构函数
不是
虚函数
? 首先,我们看一下百度百科对
虚函数
是怎么定义的: 在某基类中声明为 virtual并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual...
【002 函数】
虚函数
、
析构函数
,为什么
析构函数
必须是
虚函数
? C++默认的
析构函数
不是
虚函数
?
C++默认的
析构函数
不是
虚函数
是因为
虚函数
需要额外的
虚函数
表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其
析构函数
如果是
虚函数
,就会浪费内存。因此C++默认的
析构函数
不是
虚函数
,而是只有当需要当作父类时,设置为
虚函数
。将可能会被继承的父类的
析构函数
设置为
虚函数
,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。
C++ 语言
65,060
社区成员
250,532
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章