Russian Qt Forum

Qt => Вопросы новичков => Тема начата: MaxoBik от Май 08, 2015, 20:11



Название: QT контейнеры и указатель С++
Отправлено: MaxoBik от Май 08, 2015, 20:11
Есть такое поле класса:

QMap<int, QT_Some_Object*> * class_field;

QT_Some_Object это класс QT, который не наследует от QObject.
Так вот вопрос, если я удалю один из элементов из QMap::remove(int) - удалится ли указатель и целевой объект в куче на который он указывает?


Название: Re: QT контейнеры и указатель С++
Отправлено: Old от Май 08, 2015, 20:15
Нет


Название: Re: QT контейнеры и указатель С++
Отправлено: MaxoBik от Май 08, 2015, 20:24
Нет
Почему то удаления объекта вручную через delete ведет к крашу:

Код:
int key = 1;
this->class_field->insert(  key, new QT_Some_Object( 99999 )  );
.....
QT_Some_Object* tempObject = this->class_field->value(key);
.....
class_field->remove(key);
delete tempObject;


Название: Re: QT контейнеры и указатель С++
Отправлено: Racheengel от Май 08, 2015, 21:23
странно, вставляете в tempObject, а удаляете из class_field...


Название: Re: QT контейнеры и указатель С++
Отправлено: MaxoBik от Май 08, 2015, 21:32
странно, вставляете в tempObject, а удаляете из class_field...
Да, опЯчатка, поправил. Но проблема не в этом, непонятно почему не удается удалить объект и указатель, если удалить до remove удаляется без проблем, после remove краш, но указатель после remove не удаляется, т.е. не null.

ПС, все нашел в чем проблема, она не в remove, в моем коде.