为什么我的析构函数从未被调用过?

wez*_*ten 2 .net c++-cli

在我的表单构造函数中创建CustomPropertyList类.

form(String ^s)
{
    InitializeComponent();
    CustomPropertyList ^propertyList = gcnew CustomPropertyList(s);
...
Run Code Online (Sandbox Code Playgroud)

CustomPropertyList类有一个析构函数

CustomPropertyList::~CustomPropertyList()
{

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

程序退出时为什么不调用它?(我知道这不是因为我没有看到消息框,那里有一个断点)

我非常感谢任何帮助

Ale*_*x F 8

因为这不是析构函数,所以这是Dispose方法(用C#术语).如果客户端不调用Dispose,则永远不会调用它.另一方面,应该调用终结器(!CustomPropertyList),除非使用GC :: SuppressFinalize来阻止它.

从C#代码,可以使用Dispose调用~CustomPropertyList.从C++/CLI客户端代码,可以使用delete运算符调用它.

请参阅此C++/CLI大师文章中的更多详细信息:http://www.codeproject.com/KB/mcpp/cppclidtors.aspx