请注意:这个问题是关于“析构函数”和“终结器”这两个词的术语的区别及其正确用法。我只是举例说明了它们在C#和C++/CLI中的使用情况,以说明我为什么要问这个问题。我很清楚它是如何在C#和CLR中实现的,但是我想知道术语的正确使用。。
在C#世界中,术语“析构器”和“终结器”似乎可以互换使用,我怀疑这是因为C#规范使用“析构器”一词描述了非确定性的清理功能,而CLR文档总是使用“终结器”一词,因此在C#的范围内,它们的含义是相同的。
但是,在C++/CLI规范中,两者之间有区别。它允许确定性和非确定性的清理,并使用术语“析构函数”表示确定性功能,“终结器”用于非确定性功能:
终结器提供不确定的清理。终结器是在垃圾收集期间执行的“最后一次”函数,通常是在未执行析构函数的对象上执行。
此外,维基百科对破坏者和终结器的描述表明,析构函数和终结器是独立的概念,支持C++/CLI规范使用有关决定论的术语:
与析构函数不同,终结器不是确定性的。当程序显式释放对象时,将运行析构函数。相反,当内部垃圾收集系统释放对象时,会执行终结器。
问题如下:
https://stackoverflow.com/questions/1872700
复制相似问题