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
Nhưng khi tôi loại bỏ try-catch, tôi thấy:
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
Tại sao C++ gọi hàm hủy trong trường hợp đầu tiên nhưng không phải trong thứ hai?
Bạn có thể thêm rằng lý do cho điều này là để bạn không mất thông tin trạng thái trong kết xuất lõi. –
Điểm tốt, được thêm vào. –