C++ cli 为什么在C+;中手动调用析构函数(通过delete)后不应调用终结器+;CLI < P>后,讲述C++ CLI中析构函数和终结符的区别, 我想知道编译器为什么要添加一些指令。要在析构函数中抑制finalize

C++ cli 为什么在C+;中手动调用析构函数(通过delete)后不应调用终结器+;CLI < P>后,讲述C++ CLI中析构函数和终结符的区别, 我想知道编译器为什么要添加一些指令。要在析构函数中抑制finalize,c++-cli,suppressfinalize,C++ Cli,Suppressfinalize,finalize函数是否不代表“在finally中,它将由GC调用” 及 我们是否应该在析构函数和终结器中添加相同的“释放资源”代码?当您编写析构函数(C#中的Dispose方法)时,您应该执行清理对象的所有工作。有了一个正确编写的析构函数,终结器就无事可做了,所以编译器会抑制它 在C#中,模式是编写一个Dispose(bool)方法,并让布尔值指示您是在进行Dispose还是在完成。在C++/CLI中,编译器编写该方法,因此不允许使用该方法。我相信如果不想重复代码,您可以从析构函数调用终结器

finalize函数是否不代表“在finally中,它将由GC调用”


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

当您编写析构函数(C#中的Dispose方法)时,您应该执行清理对象的所有工作。有了一个正确编写的析构函数,终结器就无事可做了,所以编译器会抑制它


在C#中,模式是编写一个Dispose(bool)方法,并让布尔值指示您是在进行Dispose还是在完成。在C++/CLI中,编译器编写该方法,因此不允许使用该方法。我相信如果不想重复代码,您可以从析构函数调用终结器

听起来你被finally关键字弄糊涂了。这是try/catch/finally的一部分,与释放资源无关。在托管代码中,调用析构函数是可选的。您可以编写一个终结器,以确保不会引起问题。是的,终结器在垃圾收集对象后被GC调用。看起来我真的受到了try/catch/finally语义的影响谢谢你,汉斯!是的,我们可以在Dispose中重新注册Finalize,但我想知道为什么编译器/设计器在默认情况下会尝试避免这些用法?