【发布时间】:2014-07-11 02:21:55
【问题描述】:
基本上,为什么 C++/CLI 中有一个 finalize 析构函数。看起来 GC 在收集对象之前会检查是否手动调用了 delete,如果没有,则调用终结器。那么,为什么不调用delete,GC就不能调用正常的析构函数呢?
【问题讨论】:
标签: c++-cli
基本上,为什么 C++/CLI 中有一个 finalize 析构函数。看起来 GC 在收集对象之前会检查是否手动调用了 delete,如果没有,则调用终结器。那么,为什么不调用delete,GC就不能调用正常的析构函数呢?
【问题讨论】:
标签: c++-cli
出于同样的原因,您在 C# 中有一个 Dispose 方法和一个 Finalizer。粗略地说,在 C++/CLI 中,析构函数对应于 Dispose,Finalilzer 对应于终结器。我粗略地说,因为 C++/CLI 为你实现了Dispose pattern。也就是说,如果 delete 被调用(即析构函数被调用),它确保终结器被抑制。如果删除不是 调用,然后终结器将在 GC 时运行。
就像在 C# 中一样
如果你有一个终结器,那么析构函数调用终结器是很常见的(也是很好的做法)。
这两个链接也可能有帮助:
【讨论】: