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

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

概述我正在从C到C移植一些旧代码.旧代码使用类似对象的语义,并且在某一时刻将对象破坏与释放现在未使用的内存分开,其间发生的事情是: Object_Destructor(Object *me) { free(me->member1), free(me->member2) }ObjectManager_FreeObject(ObjectManager *me, Object *obj) { free( 我正在从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.

总结

以上是内存溢出为你收集整理的c – 是否总是为析构函数调用析构函数,即使它已经过载了?全部内容,希望文章能够帮你解决c – 是否总是为析构函数调用析构函数,即使它已经过载了?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1220236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存