首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++/CLI最终析构函数的需要

C++/CLI最终析构函数的需要
EN

Stack Overflow用户
提问于 2014-07-11 02:21:55
回答 1查看 9.6K关注 0票数 9

基本上,为什么C++/CLI中有一个finalize析构函数。看起来GC在收集对象之前,检查是否手动调用了delete,如果没有,则调用终结器。那么,如果未调用delete,为什么GC不能调用正常的析构函数呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-11 12:08:14

出于同样的原因,您在C#中有一个Dispose方法和一个终结器。粗略地说,在C++/CLI中,析构函数对应于Dispose,Finalilzer对应于终结器。我粗略地说,因为C++/CLI为您实现了处置模式。也就是说,如果调用delete (即调用析构函数),它将确保终结器被抑制。如果未调用delete,则终结器将在GC时运行。

就像在C#一样

  • 在析构函数中,允许清理托管对象和非托管对象。
  • 在终结器中,只允许清理非托管对象,因为此时(当垃圾收集器运行时),该对象引用的另一个托管对象可能已经清除。因此,(为了回答您的问题),GC调用析构函数(因为析构函数可能有清理托管资源的代码)是不正确的。

如果您有终结器,那么析构函数调用终结器是常见的(也是很好的做法)。

这两个链接也可能有帮助:

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24689213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档