Завершить приложение И вызвать деструкторы локальных объектов

У меня есть несколько объектов в стеке в основной функции:

int main(...)
{
   CFoo foo;
   CBar bar;
}

Кроме того, у меня есть функция, которая отслеживает ошибки в моем приложении:

void Err(std::string msg)
{
   SomehowLogErrorMessage(msg);
   exit(1);
}

Функция Err определенно полезна, когда мне нужно сообщить фатальная ошибка. Я просто записываю ошибку и закрываю приложение - после таких ошибок оно не может восстановиться. Однако завершение с помощью «exit ()» не вызывает деструкторы foo и bar - поведение, которого я действительно ожидал (но был неправильным). «abort ()» тоже не помогает. Кроме того, Я не могу использовать исключения , чтобы поймать их в main (). Есть ли другой способ реализовать функцию Err, чтобы она завершала приложение и правильно очищала объекты стека? Или мне как-то переделать обработку ошибок?

Спасибо!


ps Кстати, нельзя ли отправить сообщение WM_QUIT в главное окно? Я плохо разбираюсь в WinAPI, но мое приложение - это чистый Win32, и моя функция Err () может получить дескриптор моего главного окна. Будет ли это работать?

8
задан SadSido 12 April 2011 в 08:01
поделиться