なので、
std::auto_ptr<X> p; void foo() { p.reset(new X()); SetTimer(hwnd, id, 0); } void bar() { KillTimer(hwnd, id); p.reset(0); } LRESULT windowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_TIMER: // SetTimerしてからKillTimerするまでの間は // pは必ず有効なポインタを指しているはず p->x(); break; } }
のようなコードを書くと運が悪いとKillTimerした後でWM_TIMERが来てクラッシュしてしまいます。