基本上,为什么在C++/CLI中有一个finalize析构函数。似乎GC在收集对象之前先检查是否手动调用了delete,如果不是,则调用终结器。那么,如果未调用delete,为什么GC不能只调用普通析构函数呢?
最佳答案
出于相同的原因,您在C#中拥有Dispose方法和Finalizer。粗略地说,在C++/CLI中,析构函数对应于Dispose,而Finalilzer对应于终结器。我粗略地说,因为C++/CLI为您实现了Dispose pattern。也就是说,如果调用delete(即调用析构函数),则可确保终结器被抑制。如果不是删除
调用,则终结器将在GC时运行。
就像在C#中一样
析构函数中的
如果您有终结器,则析构函数调用终结器是常见的做法(也是一种很好的做法)。
这两个链接可能也有帮助:
关于c++-cli - C++/CLI终结器的需求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24689213/