社区
新手乐园
帖子详情
析构函数为什么不能有参数???
m9551
2007-07-27 05:47:16
有一位程序前辈给我出了一道难题,为什么析构函数就不能有参数呢?
一直没找到直接证据,请大家帮忙
...全文
2681
16
打赏
收藏
析构函数为什么不能有参数???
有一位程序前辈给我出了一道难题,为什么析构函数就不能有参数呢? 一直没找到直接证据,请大家帮忙
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
怎么能有参数呢? 析构函数是自动执行的, 给他参数它怎么办? 咋处理?
呵呵
不能处理干脆就不要参数
vue2的生命周期详解(代码演示+源码)
生命周期是vue2中一个很重要的知识点,同时也是面试中容易问到的高频面试点。熟练掌握了vue2的生命周期,可以让我们在项目开发过程中少走很多弯路,减少很多莫名其妙的bug,所以,希望本文能够对各位小伙伴有所帮助哦!
Vue3生命周期详解
Vue3生命周期钩子全面解析:相比Vue2,组合式API采用onX形式(如onMounted),替代选项式API。主要阶段包括:初始化(setup)、挂载(onBeforeMount/onMounted)、更新(onBeforeUpdate/onUpdated)、卸载(onBeforeUnmount/onUnmounted),新增了keep-alive相关钩子(onActivated/onDeactivated)和调试钩子(onRenderTracked)。setup()在beforeCreate之前执行,
vue2生命周期详解
(如果没有el,等待$mount()动态挂载,如果一直不执行挂载,此时实例是创建好了,但是实例整个生命周期过程走到created就不再往下进行了,
不能
操作dom,只能操作实例本身内容)编译模板template:也就是编译template中的值,但是这个值还在js中,还没有去到页面上,页面还是空的读取computed时,只是读取到computed里面的每个配置项,而里面的函数不会执行,只有当代码访问了这个函数才执行里面的计算。移除数据监听,事件监听,子组件。
Vue生命周期详解
目录 前言: 一、生命周期流程图详解 1.beforeCreate、Created 2.编辑模板过程 3.beforeMount、Mounted 4.beforeUpdate、Updated 5.beforeDestroy、Destroyed 二、生命周期代码 1.父子组件加载生命周期 2.父子组件更新生命周期 3.父子组件销毁生命周期 前言: 1、什么是vue生命周期? Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新
Vue的生命周期的详解
Vue的生命周期 Vue的生命周期是每个使用Vue框架的前端人员都需要掌握的知识,以此作为记录。 Vue的生命周期就是vue实例从创建到销毁的全过程,也就是new Vue() 开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期,也就是从开始创建、初始化数据、编译模版、挂载Dom -> 渲染、更新 -> 渲染、卸载 等⼀系列过程,称这是Vue的⽣命周期。钩子函数是Vue生命周期中每个阶段对外开放让程序员操作Vue的接口。Vue有8个钩子函数,分别为: beforeCreate( 创建前
新手乐园
33,315
社区成员
41,769
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章