Apakah mungkin menghentikan eksekusi perangkat lunak tanpa melewatkan panggilan ke destruktor? Misalnya, pada kode di bawah, destruktor untuk test
tidak akan pernah dipanggil karena pernyataan 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;
}
Yang saya perlukan adalah cara untuk mengakhiri program (dari dalam func()
) yang memanggil semua destruktor yang diperlukan sebelum dihentikan. Sejauh ini saya telah menangani ini melalui nilai pengembalian func()
, seperti pada:
bool func()
{
//Assuming something went wrong:
return false;
}
int main(int argc, char *argv[])
{
A test;
if( !func() )return 1;
return 0;
}
Masalah dengan metode ini adalah metode ini dengan cepat menjadi sangat mengganggu (dan kode membengkak) untuk dikelola begitu Anda perlu menerapkannya ke serangkaian fungsi yang disarangkan.
Apakah ada cara untuk mencapai hasil yang sama dari contoh kedua (panggilan destruktor yang tepat) dengan sintaksis yang mirip dengan contoh pertama (panggil exit(1)
di mana pun Anda berada)?
exit
; sebaliknya, berikan pengecualian dan tangkap di levelmain
. - person Kerrek SB   schedule 29.11.2011