class XX
{
public:
static unsigned s_cnt;
XX()
{
++ s_cnt;
std::cout << "C XX " << s_cnt << "\n";
if (s_cnt > 2)
throw std::exception();
}
//private:
~XX()
{
std::cout << "~ XX\n";
}
};
unsigned XX::s_cnt = 0;
int main()
{
try
{
XX *xx = new XX[10];
} catch (...)
{
std::cout << "Exc\n";
}
}
C XX 1
C XX 2
C XX 3
~ XX
~ XX
Exc
Ma quando rimuovo try-catch, vedo:
C XX 1
C XX 2
C XX 3
terminate called after throwing an instance of 'std::exception'
what(): std::exception
zsh: abort ./a.out
Perché C++ chiamare i distruttori in primo caso ma non nel secondo?
È possibile aggiungere che la ragione di ciò è che non si perdono le informazioni di stato nel core dump. –
Buon punto, aggiunto. –