Можно ли завершить выполнение программы без пропуска вызовов деструкторов? Например, в приведенном ниже коде деструктор для 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)
, где бы вы ни находились)?