社区
新手乐园
帖子详情
析构函数为什么不能有参数???
m9551
2007-07-27 05:47:16
有一位程序前辈给我出了一道难题,为什么析构函数就不能有参数呢?
一直没找到直接证据,请大家帮忙
...全文
2568
16
打赏
收藏
析构函数为什么不能有参数???
有一位程序前辈给我出了一道难题,为什么析构函数就不能有参数呢? 一直没找到直接证据,请大家帮忙
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lddLinan
2007-07-30
打赏
举报
回复
通过父类指针删除子类是多态的典型应用,如果析构函数带了参数,那么如何通过父类删除子类?
析构函数带了参数,那么在析构子类的时候,编译器就无法生成自动析构父类的代码,需要子类手动去析构父类,这个不是一个很充分的理由,只是会将语言复杂化。
windboyzsj
2007-07-28
打赏
举报
回复
这样一来就要手动调用才能设置实参,而不能由系统自动调用了
windboyzsj
2007-07-28
打赏
举报
回复
marrco2005(高手前传)
====================
是不是这样理解啊
也就是说
this->~Destroy(this) //OK
this->~Destroy(this,...) //如果设置实参?
m9551
2007-07-28
打赏
举报
回复
大家好~~我是这个问题的楼主
lddLinan(不再五行中) 说了一部分答案
marrco2005(高手前传) 又回答了这个问题的一部分非常感谢!!
我可能前面表达的不是很清楚,大家说了很多,提到析构函数不能有参数,而没说清楚“为什么不能有参数”这个原理。这就好比我问“老虎为什么不吃大白菜”很多人都在说“因为老虎不爱吃大白菜”或者“老虎是肉食动物”,我希望听到从营养学角度来分析老虎与白菜问题。
关于析构函数不能有参数这个问题也是一样,从c++的角度而言,是一种什么样的机制,使析构函数不能有参数的呢?
marrco2005
2007-07-27
打赏
举报
回复
事实上,在调用析构函数函数时,的确需要一个参数,就是this指针,不同的编译器传递this指针的方法也不同。既然this指针可以作为参数传递给析构函数,那么传一个参数是传,传两个参数也是传,只要有必要,想传几个参数就传几个参数,这在技术上绝对能做得到。但是问题是,现在的析构函数不需要额外的参数就能完成所有的工作,为什么还要多此一举,增加额外的参数呢?
从另外一个角度来讲,如果析构函数带有额外的参数,那么编译器应该用什么样的实参来调用这个析构函数呢?编译器肯定没有这样智能,这个实参肯定需要程序员来指定,而这样的话,不觉得很复杂吗?
freshui
2007-07-27
打赏
举报
回复
eggqq007(特来误人子弟) ( ) 信誉:100 2007-07-27 18:03:20 得分: 0
析构函数的目的是删除所有的东西。既然这样,就没有必要给它传什么东西,反正到时候一样被删除。
用完了就要删, 不然就是占着茅坑不拉屎, 别人还在外面等着呢~!
你这样的想法编出来的程序别人敢用吗?就是有100000G的内存也不够你程序跑半天
VCLIFE
2007-07-27
打赏
举报
回复
没参数的析够 OK
实达诚实
2007-07-27
打赏
举报
回复
析构函数都是默认的呀!
R9R9R9
2007-07-27
打赏
举报
回复
你想要参数干嘛?嫌这样太舒服了不是?
WM_JAWIN
2007-07-27
打赏
举报
回复
那就自己加一个close了.像ADO一样
m9551
2007-07-27
打赏
举报
回复
赞同lddLinan(不再五行中) 的说法,因为只有他说了为什么不能有,而不是向楼上很多说不应该有。
现在我想知道为什么
--------------------------------------
1。多态就一团糟
2。子类就不知道如何析构父类
--------------------------------------
加一个参数为什么就一团糟了?加一个参数为什么就不能够析构父类了呢?
lddLinan
2007-07-27
打赏
举报
回复
如果析构函数可以有参数
1。多态就一团糟
2。子类就不知道如何析构父类
...
从理念上讲,一个object在释放自己的时候提供参数是说的过去的,你可以选择不同的自杀方式或者不同的杀人方式。
eggqq007
2007-07-27
打赏
举报
回复
析构函数的目的是删除所有的东西。既然这样,就没有必要给它传什么东西,反正到时候一样被删除。
freshui
2007-07-27
打赏
举报
回复
当然可以
不过99%的时候都是自动的
bs发明C++的时候故意这样搞的, 因为C程序中很多错误都是因为程序员申请了资源而忘记释放引起的
加一个自动执行的析构函数就可以防止这个问题
eggqq007
2007-07-27
打赏
举报
回复
LS的,析构函数也是可以手动执行的。。
freshui
2007-07-27
打赏
举报
回复
怎么能有参数呢? 析构函数是自动执行的, 给他参数它怎么办? 咋处理?
呵呵
不能处理干脆就不要参数
腾讯2012笔试题目
腾讯2012笔试题目,包含很多普及型很高的题目
为什么
析构函数
必须是虚函数?为什么默认的
析构函数
不是虚函数?
微信搜索“编程笔记本”,获取更多信息 ------------- codingbook2020 ------------- 今天我们来谈一谈面试 C++ 工程师时经常被谈到的一个问题:为什么
析构函数
必须是虚函数?为什么默认的
析构函数
不是虚函数? 首先,我们看一下百度百科对虚函数是怎么定义的: 在某基类中声明为 virtual并在一个或多个派生类中被重新定义的成员函数,用法格式为:virtual...
为什么
析构函数
必须是虚函数?为什么C++默认的
析构函数
不是虚函数
为什么
析构函数
必须是虚函数?为什么C++默认的
析构函数
不是虚函数 将可能会被继承的父类的
析构函数
设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。 C++默认的
析构函数
不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其
析构函数
如果是虚函数,就会浪费内存。因此C++默认的
析构函数
不是虚函数,而是只有当需要当作父类时,设置为虚函数。 ...
析构函数
1.什么是
析构函数
析构函数
于构造函数相对应,构造函数是对象创建的时候自动调用的,而
析构函数
就是对象在销毁的时候自动调用的的 特点: 1)构造函数可以有多个来构成重载,但
析构函数
只能有一个,
不能
构成重载 2)构造函数可以有
参数
,但
析构函数
不能
有
参数
3)与构造函数相同的是,如果我们没有显式的写出
析构函数
,那么编译器也会自动的给我们加上一个
析构函数
,什么都不做;如果我们显式的写了
析构函数
,...
新手乐园
33,321
社区成员
41,774
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章