我的表单构造函数中创建了一个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)
...
程序退出时为什么不调用? (我知道这不是因为我没有看到消息框,并且那里有一个断点)
我非常感谢任何帮助
答案 0 :(得分:8)
因为这不是析构函数,所以这是Dispose方法(用C#术语)。如果客户端不调用Dispose,则永远不会调用它。另一方面,应该调用终结器(!CustomPropertyList),除非使用GC :: SuppressFinalize来阻止它。
从C#代码,可以使用Dispose调用~CustomPropertyList。从C ++ / CLI客户端代码,可以使用delete operator来调用它。
请参阅此C ++ / CLI大师文章中的更多详细信息:http://www.codeproject.com/KB/mcpp/cppclidtors.aspx
答案 1 :(得分:2)
从.net开始,C ++ / CLI类看起来像是一个实现IDisposable
接口的类。要调用析构函数,您必须在对象上调用Dispose
。
答案 2 :(得分:1)
在C ++ / CLI中,如果希望对象具有由封闭范围控制的生命周期(对于成员子对象,与父对象相同的生命周期),请在没有句柄或指针语法的情况下声明它们。
e.g。
CustomPropertyList propertyList(s);
或成员子对象:
ref class form
{
CustomPropertyList propertyList;
form(String^ s)
: propertyList(s)
{
InitializeComponent();
}
}