2010-08-25 106 views
2

CustomPropertyList類是在我的窗體構造函數中創建的。爲什麼我的析構函數從來沒有調用過?

form(String ^s) 
{ 
    InitializeComponent(); 
    CustomPropertyList ^propertyList = gcnew CustomPropertyList(s); 
... 

的CustomPropertyList類有析構函數

CustomPropertyList::~CustomPropertyList() 
{ 

    if (MessageBox::Show("Do you want to save your changes?","Editin",MessageBoxButtons::YesNo)==DialogResult::Yes) 
... 

爲什麼不叫程序退出時? (我知道這是不是因爲我沒有看到該消息框,並有一個斷點)

我任何幫助

回答

8

非常感激因爲這不是析構函數,這是Dispose方法(在C#中的術語)。如果客戶端不調用Dispose,則永遠不會調用它。另一方面,應該調用finalizer(!CustomPropertyList),除非使用GC :: SuppressFinalize來防止它。

從C#代碼中,可以使用Dispose調用〜CustomPropertyList。從C++/CLI客戶端代碼中,可以使用delete操作符調用它。

看到這個C++/CLI大師文章的詳細信息:http://www.codeproject.com/KB/mcpp/cppclidtors.aspx

+0

感謝 - 它的工作非常好 - 剛添加刪除 – wezten 2010-08-25 12:49:17

2

從.net,一個C++/CLI類看起來像一個實現IDisposable接口的類。要調用析構函數,您必須在對象上調用Dispose

1

在C++/CLI中,如果希望對象具有由封閉作用域(對於成員子對象,與父對象具有相同的生命週期)控制的生存期,請在不使用句柄或指針語法的情況下聲明它們。

例如

CustomPropertyList propertyList(s); 

或成員子對象:

ref class form 
{ 
    CustomPropertyList propertyList; 
    form(String^ s) 
     : propertyList(s) 
    { 
     InitializeComponent(); 
    } 
} 
相關問題