Xét đoạn mã sau:Destructor không được gọi khi một ngoại lệ được ném
#include <iostream>
using namespace std;
class Test {
static int count;
int id;
public:
Test() {
count++;
id = count;
cout << "Constructing object number " << id << endl;
if(id == 4)
throw 4;
}
~Test() { cout << "Destructing object number " << id << endl; }
};
int Test::count = 0;
int main() {
try {
Test array[5];
} catch(int i) {
cout << "Caught " << i << endl;
}
}
Đoạn mã trên sẽ cho kết quả như sau:
Constructing object number 1
Constructing object number 2
Constructing object number 3
Constructing object number 4
Destructing object number 3
Destructing object number 2
Destructing object number 1
Caught 4
Tôi nghĩ destructors luôn gọi khi đối tượng trở ra khỏi phạm vi , ngay cả khi ngoại lệ được ném. Tại sao không phải là một trong những kẻ hủy diệt Test
trường hợp được gọi trong trường hợp này?
Tôi đã chỉnh sửa câu hỏi của bạn thành một thứ phù hợp hơn cho Stack Overflow. Vui lòng thực hiện theo [các nguyên tắc câu hỏi] (http://stackoverflow.com/questions/how-to-ask) để tham khảo trong tương lai hoặc câu hỏi của bạn có thể bị downvoted/closed. –