У меня есть программа, которая реализует базу данных о населении и его компаниях. Я создал динамический массив указателей на члены класса вместо динамического массива членов класса, потому что копирование происходит быстрее с ним.Несоответствие удалить
У меня есть версия, которая работает, но 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) Вы знакомы с [Правило трех] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three)? (2) Вы считали интеллектуальные указатели и контейнеры вместо необработанных указателей и динамически распределенной памяти? –