析构函数为什么不能有参数???

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
  • 打赏
  • 举报
回复
怎么能有参数呢? 析构函数是自动执行的, 给他参数它怎么办? 咋处理?
呵呵
不能处理干脆就不要参数

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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