这是否有意义,如果我说析构函数是存在突然没有得到完成的机会,因为UI窗口已被取消,当所有这一切发生在同一(主)线程?析构函数没有足够的时间来完成?
当我按在对话框中的“取消”,我想释放与列表时,相关的记忆:)
CMyListCtrl::~CMyListCtrl()
{
ItemData* pItemData;
int nItems = GetItemCount(); <- errors out here and it is called
for(int i=0; i<nItems; i++)
{
pItemData = (ItemData*)GetItemData(i);
if(pItemData != NULL)
delete pItemData;
}
}
我OnCancel(处理程序如下,其中
LONG CSetupDlg::OnCancel(UINT wParam, LONG lParam)
{
((CSetupDoc *)GetActiveDocument())->Exit();
return 0;
}
void CSetupDoc::Exit()
{
GetDocTemplate()->CloseAllDocuments(TRUE);
}
析构函数主要是因为CloseAllDocuments()
调用而被调用,但在尝试清理时它会在中间被炸掉,我甚至无法通过它。如果我评论CloseAllDocuments()
调用,那么窗口永远不会被销毁,析构函数也不会被调用,所以析构函数肯定与这个函数绑定在一起,并且它们显然是在同一个线程中。
为什么它声称好像底层窗口已经奇迹般地消失了?
我得到的错误信息是MyApp has triggered a breakpoint
,我无法再进一步了解它。
请提供更多代码。没有看到每一行被执行,都很难调试。 – UniversE
请指出(至少在标签中)你正在做什么。这几乎可以肯定是Windows,但那么什么环境? MFC? ATL? –
我不认为直到窗口被销毁才调用析构函数,因此访问控件已经太晚了。我不知道为什么这会与'CloseAllDocuments'连接。 –