为什么我的析构函数从来没有调用过?
问题描述:
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)
...
为什么不叫程序退出时? (我知道这是不是因为我没有看到该消息框,并有一个断点)
我任何帮助
答
非常感激因为这不是析构函数,这是Dispose方法(在C#中的术语)。如果客户端不调用Dispose,则永远不会调用它。另一方面,应该调用finalizer(!CustomPropertyList),除非使用GC :: SuppressFinalize来防止它。
从C#代码中,可以使用Dispose调用〜CustomPropertyList。从C++/CLI客户端代码中,可以使用delete操作符调用它。
看到这个C++/CLI大师文章的详细信息:http://www.codeproject.com/KB/mcpp/cppclidtors.aspx
答
从.net,一个C++/CLI类看起来像一个实现IDisposable
接口的类。要调用析构函数,您必须在对象上调用Dispose
。
答
在C++/CLI中,如果希望对象具有由封闭作用域(对于成员子对象,与父对象具有相同的生命周期)控制的生存期,请在不使用句柄或指针语法的情况下声明它们。
例如
CustomPropertyList propertyList(s);
或成员子对象:
ref class form
{
CustomPropertyList propertyList;
form(String^ s)
: propertyList(s)
{
InitializeComponent();
}
}
感谢 - 它的工作非常好 - 刚添加删除 – wezten 2010-08-25 12:49:17