加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否总是为析构函数调用析构函数,即使它已经过载了?

发布时间:2020-12-16 10:26:50 所属栏目:百科 来源:网络整理
导读:我正在从C到C移植一些旧代码.旧代码使用类似对象的语义,并且在某一时刻将对象破坏与释放现在未使用的内存分开,其间发生的事情是: Object_Destructor(Object *me) { free(me-member1),free(me-member2) }ObjectManager_FreeObject(ObjectManager *me,Object
我正在从C到C移植一些旧代码.旧代码使用类似对象的语义,并且在某一时刻将对象破坏与释放现在未使用的内存分开,其间发生的事情是:

Object_Destructor(Object *me) { free(me->member1),free(me->member2) }

ObjectManager_FreeObject(ObjectManager *me,Object *obj) { free(obj) }

使用标准析构函数(~Object)和随后的删除obj调用是否可以在C中使用上述功能?或者,我担心,这样做会将析构函数调用两次?

在特定情况下,也会覆盖Object的运算符删除.我在其他地方读过的定义(“当使用operator delete时,对象有一个析构函数,总是调用析构函数)在重写的运算符中是正确的吗?

解决方法

您可以将销毁与删除分开,但您可能并不真的想要.

如果使用新的char []或malloc分配内存,然后调用placement new,则可以将删除(通过直接调用析构函数执行)与删除(或免费)分开.但是你不再调用类的重载操作符delete,而是在char数组(或free)上调用delete [].

如果你通过指向你的类的指针(你重载的操作符删除的那个)调用delete,那么将调用该类的析构函数.因此,没有办法在你要求的意义上将它们分开,在没有析构函数的情况下调用delete.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读