Tôi chỉ mới bắt đầu với RAII trong C++ và thiết lập một trường hợp thử nghiệm nhỏ. Hoặc mã của tôi bị nhầm lẫn sâu sắc, hoặc RAII không hoạt động! (Tôi đoán nó là cái cũ).C++ RAII không hoạt động?
Nếu tôi chạy:
#include <exception>
#include <iostream>
class A {
public:
A(int i) { i_ = i; std::cout << "A " << i_ << " constructed" << std::endl; }
~A() { std::cout << "A " << i_ << " destructed" << std::endl; }
private:
int i_;
};
int main(void) {
A a1(1);
A a2(2);
throw std::exception();
return 0;
}
ngoại trừ nhận xét ra tôi nhận được:
A 1 constructed
A 2 constructed
A 2 destructed
A 1 destructed
như mong đợi, nhưng ngoại trừ tôi nhận được:
A 1 constructed
A 2 constructed
terminate called after throwing an instance of 'std::exception'
what(): std::exception
Aborted
nên đối tượng của tôi không bị phá hủy mặc dù chúng không nằm trong phạm vi. Đây không phải là toàn bộ cơ sở cho RAII.
Con trỏ và chỉnh sửa được đánh giá cao!
Bạn cũng đã tìm thấy lỗi trong C++! =) – Eric
trường hợp cạnh thú vị! –
Bạn đã phá vỡ RAII: ( – rpg