Quy tắc chung, chỉ các đối tượng được phân bổ trong cửa hàng miễn phí mới có thể gây rò rỉ bộ nhớ. Nhưng các đối tượng được tạo trong ngăn xếp thì không.Đây có phải là rò rỉ bộ nhớ không?
Đây là nghi ngờ của tôi,
int main()
{
myclass x;
...
throw;
...
}
Nếu ném không được xử lý, nó gọi, chấm dứt(), mà lần lượt các cuộc gọi hủy bỏ() và bị treo ứng dụng. Tại thời điểm này, các đối tượng trong ngăn xếp không phải là destoryed (The destructor không được gọi).
sự hiểu biết của tôi là "Khi chấm dứt ứng dụng (hoặc bằng cách hủy bỏ hoặc bởi lối bình thường), nó giải phóng tất cả các bộ nhớ đã được phân bổ cho các ứng dụng". Vì vậy, điều này không thể được coi là rò rỉ bộ nhớ.
Tôi có đúng không?
Chúng ta có nên giả định một ứng dụng đơn luồng không? –
Hãy lấy một cái gì đó rõ ràng, 'ném;' trong mã của bạn tương đương với 'terminate()', bởi vì bạn đang cố gắng ném lại một ngoại lệ mà không có gì để ném lại. Nó được thực hiện xác định có hay không mà thư giãn ngăn xếp. Nếu bạn ném * một cái gì đó *, tất cả các biến tự động phải có destructors của họ được gọi là. Đó là toàn bộ ý tưởng đằng sau SBRM (RAII). – GManNickG
jdv, vâng nó là một ứng dụng đơn luồng. – user373215