为什么在C ++ CLI中手动调用析构函数(通过删除)后不应调用Finalizer

时间:2012-07-24 15:51:25

标签: c++-cli suppressfinalize

在参考了这个article之后,讨论了析构函数和...的区别。终结器IN C ++ CLI, 我想知道为什么编译器会添加一些instrs。抑制析构函数中的finalize?

Dose finalize函数不代表“最后,它将被GC调用”?

我们是否应该在析构函数和终结器中添加相同的“发布资源”代码?

1 个答案:

答案 0 :(得分:0)

当你编写析构函数(C#中的Dispose方法)时,你应该做所有清理对象的工作。使用正确编写的析构函数,终结器无需执行任何操作,因此编译器会对其进行抑制。

在C#中,模式是编写Dispose(bool)方法,并使用布尔值表示您是在处理还是最终确定。在C ++ / CLI中,编译器会编写该方法,因此您不被允许。我相信你可以简单地从析构函数中调用终结器,如果你不想重复代码的话。