У меня действительно странная проблема с векторами stl, в которых неправильный деструктор вызывается для правильного объекта, когда я вызываю метод стирания, если это имеет смысл.
Мой код выглядит примерно так:
Странная проблема с векторами
for(vector<Category>::iterator iter = this->children.begin(); iter != this->children.end(); iter++)
{
if((*iter).item == item)
{
this->children.erase(iter);
return;
}
-------------------------
}
Это просто простая функция, которая находит элемент в вектор, который имеет некоторый элемент, который нужно найти, и удаляет указанный элемент из вектора. Моя проблема в том, что, когда вызывается функция стирания, и, таким образом, объект, на который указывает итератор, уничтожается, вызывается неправильный деструктор. Более конкретным является деструктор последнего элемента в векторе, а не фактический удаляемый объект. Таким образом, память удаляется из неправильного объекта, который по-прежнему будет элементом в векторе, а фактический объект, который удаляется из вектора, все еще сохраняет всю свою память.
costructor объекта выглядит следующим образом:
Category::Category(const Category &from)
{
this->name = from.name;
for(vector<Category>::const_iterator iter = from.children.begin(); iter != from.children.end(); iter++)
this->children.push_back((*iter));
this->item = new QTreeWidgetItem;
}
И деструктор
Category::~Category()
{
this->children.clear();
if(this->item != NULL)
{
QTreeWidgetItem* parent = this->item->parent();
if(parent != NULL) parent->removeChild(this->item);
delete this->item;
}
}
Как выглядит ваш оператор присваивания копий? –
Рабочим минимальным примером было бы гораздо больше приветствоваться. – karlphillip
У меня нет оператора копирования, я его не использую. –