首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >析构函数和终结器之间的区别?

析构函数和终结器之间的区别?
EN

Stack Overflow用户
提问于 2009-12-09 09:40:50
回答 4查看 6.9K关注 0票数 37

请注意:这个问题是关于“析构函数”和“终结器”这两个词的术语的区别及其正确用法。我只是举例说明了它们在C#和C++/CLI中的使用情况,以说明我为什么要问这个问题。我很清楚它是如何在C#和CLR中实现的,但是我想知道术语的正确使用。

在C#世界中,术语“析构器”和“终结器”似乎可以互换使用,我怀疑这是因为C#规范使用“析构器”一词描述了非确定性的清理功能,而CLR文档总是使用“终结器”一词,因此在C#的范围内,它们的含义是相同的。

但是,在C++/CLI规范中,两者之间有区别。它允许确定性和非确定性的清理,并使用术语“析构函数”表示确定性功能,“终结器”用于非确定性功能:

终结器提供不确定的清理。终结器是在垃圾收集期间执行的“最后一次”函数,通常是在未执行析构函数的对象上执行。

此外,维基百科对破坏者终结器的描述表明,析构函数和终结器是独立的概念,支持C++/CLI规范使用有关决定论的术语:

与析构函数不同,终结器不是确定性的。当程序显式释放对象时,将运行析构函数。相反,当内部垃圾收集系统释放对象时,会执行终结器。

问题如下:

  • 从计算机科学的角度来看,“析构函数”和“终结器”之间是否有明确的区别,还是术语只能在上下文中定义?
  • 如果有一个明确定义的差异,那么为什么C#规范会使用“错误”的术语?
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1872700

复制
相关文章

相似问题

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