這是否有意義,如果我說析構函數是存在突然沒有得到完成的機會,因爲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'連接。 –