在VS 2010中调试时未调用析构函数

时间:2010-08-26 08:17:57

标签: visual-studio-2010 unmanaged

我有一个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的析构函数。 但如果我通过双击它来运行程序(它是一个控制台应用程序), 析构函数立即被调用。

为什么表现得像这样?

非常感谢, 此致

1 个答案:

答案 0 :(得分:1)

我可能错了,但是C ++析构函数不是映射到C ++ / CLI中的IDisposable.Dispose吗?如果是这样,您必须调用Dispose或者将其包装在using块中,就像使用任何其他IDisposable一样:

using (ManagedFoo foo = new ManagedFoo()) {
    /// Use foo in here
}

nob链接的问题解释了为什么直接调试和运行之间的行为可能不同。我敢打赌,如果你没有明确地调用它,那么在终结器中调用析构函数。