Tôi có chương trình thực hiện cơ sở dữ liệu của các dân tộc và công ty của mình. Tôi đã tạo ra mảng động của con trỏ đến các thành viên lớp thay vì mảng động của các thành viên lớp, gây ra sao chép nhanh hơn với nó.Không phù hợp xóa
Tôi có phiên bản mà hoạt động nhưng valgrind cho thấy không phù hợp xóa trong destructor (xóa db)
CCompany** db;
~CCompanyIndex (void)
{
for(unsigned i=0;i<len;i++)
{
/*cout<<"dealloc:"<<db[i]<<endl;*/
delete db[i];
}
delete db;
}
CCompanyIndex (void)
{
max=1000;
len=0;
db=new CCompany*[max];
}
Tôi cũng sử dụng để thêm
CCompany* newIt=new CCompany(oName,oAddr,cName,cAddr);
Vì vậy, tôi đã cố gắng mã sau đây mà tôi xem xét chính xác trước đó
~CCompanyIndex (void)
{
delete [] db;
}
Nhưng sau đó tất cả bộ nhớ được phân bổ bằng cách thêm phương pháp không được deallocated.
(1) Bạn có quen thuộc với [Quy tắc ba] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) không? (2) Bạn có coi con trỏ thông minh và thùng chứa thay vì con trỏ thô và bộ nhớ được cấp động không? –