Можно ли завершить выполнение программы, не пропуская вызовы деструкторов? Например, в приведенном ниже коде деструктор для test
никогда не будет вызываться из-за оператора exit(1)
.
#include <iostream>
#include <cstdlib>
using namespace std;
class A{
public:
A(){cout << "Constructed.\n";}
~A(){cout << "Destroyed.\n";}
};
void func()
{
//Assuming something went wrong:
exit(1);
}
int main(int argc, char *argv[])
{
A test;
func();
return 0;
}
Что мне нужно, так это способ завершить программу (изнутри func()
), которая вызывает все необходимые деструкторы перед завершением. До сих пор я обрабатывал это через возвращаемое значение func()
, например:
bool func()
{
//Assuming something went wrong:
return false;
}
int main(int argc, char *argv[])
{
A test;
if( !func() )return 1;
return 0;
}
Проблема с этим методом заключается в том, что он быстро становится очень раздражающим (и раздувает код), когда вам нужно применить его к ряду вложенных функций.
Есть ли способ добиться тех же результатов, что и во втором примере (правильные вызовы деструктора) с синтаксисом, аналогичным первому примеру (вызов exit(1)
, где бы вы ни находились)?
exit
; скорее сгенерируйте исключение и перехватите его на уровнеmain
. - person Kerrek SB   schedule 29.11.2011