我有一个C#项目,其中使用了托管C ++类。 这个托管的C ++类包装了一个非托管的C ++代码。
我有这样的代码块;
if (true)
{
ManagedFoo foo = new ManagedFoo();
}
//GC.Collect(); // I also tried with this one but result is same
我已经将一个简单的输出字符串放到了类的析构函数中。
如果我从visual studio运行程序,则不调用foo的析构函数。 但如果我通过双击它来运行程序(它是一个控制台应用程序), 析构函数立即被调用。
为什么表现得像这样?
非常感谢, 此致
答案 0 :(得分:1)
我可能错了,但是C ++析构函数不是映射到C ++ / CLI中的IDisposable.Dispose吗?如果是这样,您必须调用Dispose或者将其包装在using块中,就像使用任何其他IDisposable一样:
using (ManagedFoo foo = new ManagedFoo()) {
/// Use foo in here
}
nob链接的问题解释了为什么直接调试和运行之间的行为可能不同。我敢打赌,如果你没有明确地调用它,那么在终结器中调用析构函数。