【发布时间】:2013-03-08 20:45:16
【问题描述】:
我有一个实现人民和他的公司数据库的程序。我创建了指向类成员的动态指针数组,而不是类成员的动态数组,因为使用它进行复制更快。
我有版本可以工作,但 valgrind 在析构函数中显示不匹配删除(删除数据库)
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];
}
我也用来加
CCompany* newIt=new CCompany(oName,oAddr,cName,cAddr);
所以我尝试了以下我之前认为正确的代码
~CCompanyIndex ( void )
{
delete [] db;
}
但是随后通过添加方法分配的所有内存都没有被释放。
【问题讨论】:
-
(1) 你熟悉Rule of Three吗? (2) 您是否考虑过智能指针和容器而不是原始指针和动态分配的内存?
标签: c++ dynamic valgrind mismatch