なので、
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が来てクラッシュしてしまいます。