Vài giờ trở lại tôi đã không quan tâm đến vấn đề Memory Leak và hóa ra là tôi thực sự có một số thứ cơ bản về các destructor ảo sai! Hãy để tôi đặt giải thích thiết kế lớp học của tôi.Trình phá hủy ảo hoạt động như thế nào?
class Base
{
virtual push_elements()
{}
};
class Derived:public Base
{
vector<int> x;
public:
void push_elements(){
for(int i=0;i <5;i++)
x.push_back(i);
}
};
void main()
{
Base* b = new Derived();
b->push_elements();
delete b;
}
Công cụ kiểm tra giới hạn báo cáo rò rỉ bộ nhớ trong vector lớp dẫn xuất. Và tôi đã tìm ra rằng destructor không phải là ảo và destructor lớp dẫn xuất không được gọi. Và nó đáng ngạc nhiên đã được cố định khi tôi thực hiện các destructor ảo. Không phải là vector deallocated tự động ngay cả khi destructor lớp dẫn xuất không được gọi là? Đó có phải là một quirk trong BoundsChecker công cụ hoặc là sự hiểu biết của tôi về destructor ảo sai?
Vui lòng không định dạng mã của bạn bằng HTML. Chọn và nhấn nút '0101' sẽ thụt lề bằng 4 dấu cách. – Yacoby
mã như đã đăng không có mối quan hệ nào giữa Base và Derived – JRL
@JRL: Cảm ơn. Có nguồn gốc từ Base. Tôi đã thực hiện thay đổi .. – Prabhu