我有一個非常簡單的類,它在線程中的函數完成時通知父線程。問題是實例化它時,調用構造函數,然後立即調用析構函數。這裏是這個類:爲什麼我的類析構函數立即調用?
AutoNotify::AutoNotify(HWND hWnd)
{
m_hWnd = hWnd;
::PostMessage(m_hWnd, IDM_THREAD_STARTED, 0 , 0);
}
AutoNotify::~AutoNotify(void)
{
::PostMessage(m_hWnd, IDM_THREAD_FINISHED, 0 , 0);
}
這是我如何在另一個類中使用這個類。
UINT CTestDlg::ThreadProc(LPVOID lpVoid)
{
int result = false;
CTestDlg *dlg = (CTestDlg *) lpVoid;
AutoNotify(dlg->m_hWnd);
if ((result = dlg->LongFunction()) == ERROR_SUCCESS)
return result;
// more stuff
return TRUE;
}
當我通過調試步驟,它調用AutoNotify
構造函數,然後立即它的析構函數。我想可能是因爲一些編譯器的優化,因爲這個類是空的!?比我聲明其唯一的成員變量m_hWnd
是不穩定的,但仍然沒有用。任何人爲什麼立即調用析構函數?
如果您沒有命名'AutoNotify'對象(或將其綁定到'const&'),它不會在它後面的';'存活。 – dlf
沒有'AutoNotify'的實例。換句話說,本地版本會持續到「調用」構造函數的行上達到分號。 –
'AutoNotify variable_name(dlg-> m_hWnd);'? – nevermind