相关疑难解决方法(0)

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

请注意:这个问题是关于"析构函数"和"终结器"之间的术语差异及其正确用法.我只提供了在C#和C++/CLI中使用它们的示例,以说明我提出问题的原因.我很清楚它是如何在C#和CLR中实现的,但我问的是术语的正确使用.


在C#世界中,术语"析构函数"和"终结器"似乎几乎可以互换使用,我怀疑是因为C#规范使用"析构函数"一词来描述非确定性清理功能,而CLR文档总是使用单词"终结者",所以在C#领域内他们的意思相同.

但是,在C++/CLI规范中,两者之间存在差异.它允许确定性和非确定性清理,并使用术语"析构函数"作为确定性功能,使用"终结器"作为非确定性功能:

终结器提供非确定性清理.终结器是在垃圾收集期间执行的"最后机会"函数,通常在未执行析构函数的对象上执行.

另外,维基百科对析构函数终结器的描述表明析构函数终结符是单独的概念,并且支持C++/CLI规范使用与确定性有关的术语:

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

问题:

  • 从计算机科学的角度来看,是否存在"析构函数"和"终结器"之间明确定义的区别,或者术语是否只能在上下文中定义?

  • 如果存在明确定义的差异,那么为什么C#规范会使用"错误"的术语?

c# destructor terminology finalizer

36
推荐指数
2
解决办法
5395
查看次数

标签 统计

c# ×1

destructor ×1

finalizer ×1

terminology ×1