У меня есть функция, которая показывает диалоговое окно модели и ждет, пока пользователь что-то сделает, однако это сложно и, возможно, что-то не так, и в этом случае будет выдано исключение.
Вот предполагаемый код, который вызывает эту функцию с обработкой исключений:
try {
CMyDialog mydialog();
mydialog.DoModal();
}
catch(std::logic_error &e){
DoExceptionHandling();
}
Пользовательский интерфейс диалога написан на ATL, и давайте предположим, что есть обработчик кнопки OnClick следующим образом:
LRESULT CMyDialog::OnBnClickedBlah(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/){
...
throw std::logic_error("BlahBlah");
}
Однако при выполнении вышеуказанного кода, как только было сгенерировано исключение, в режиме отладки я вызвал утверждение ATL, которое утверждает, что HWND диалога должно быть нулевым (но на самом деле оно еще не очищено).
Что я хочу знать, так это как решить эту проблему и разрешить вызывающей стороне перехватить исключительную ситуацию и убедиться, что все ресурсы были освобождены должным образом?