2010-08-26 77 views
0

我有一個C#項目,其中使用了託管C++類。 這個託管的C++類包裝了一個非託管的C++代碼。在VS 2010中調試時未調用析構函數

我有這樣的代碼塊;

if (true) 
{ 
       ManagedFoo foo = new ManagedFoo();     
} 

//GC.Collect(); // I also tried with this one but result is same 

我已經把一個簡單的輸出串類的析構函數。

如果我從Visual Studio運行程序,foo的析構函數不會被調用。 但是,如果我通過雙擊它(它是一個控制檯應用程序)運行程序,立即調用 析構函數。

爲什麼它的行爲如此呢?

非常感謝, 問候

+0

重複從http://stackoverflow.com/questions/755680/gc-collect-doesnt-seem-to-work-in-debug-mode ? – nob 2010-08-26 08:25:36

回答

1

我可能是錯的,但不是C++的析構函數映射到IDisposable.Dispose在C++/CLI?如果是這樣,你必須調用Dispose或者說在使用塊包裝它,就像任何其他的IDisposable:

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

由諾布聯的問題解釋了爲什麼行爲可能是調試和運行直接之間的不同。我敢打賭,如果你沒有明確地調用析構函數,就會在終結器中調用析構函數。