Russian Qt Forum

Qt => Общие вопросы => Тема начата: pakulo от Июнь 13, 2007, 19:37



Название: Утечка памяти
Отправлено: pakulo от Июнь 13, 2007, 19:37
перетаскиваю объект
QDrag *drag = new QDrag(this);
...
drag->start();

нужно ли делать
delete drag; ?

этот вопрос касается и QMimeData, которое я присваиваю drag

QMimeData *mimeData = new QMimeData;
drag->setMimeData(mimeData);


Название: Утечка памяти
Отправлено: SABROG от Июнь 13, 2007, 21:01
а в стеке нельзя его создать ?

Код:

QDrag drag;
drag.start();

QMimeData mimeData;
drag.setMimeData(mimeData);


Или там заморочка идет с возвращением указателя ?
Удалять - хорошая практика. Я бы не стал рассчитывать на "разумность" Qt.


Название: Утечка памяти
Отправлено: Racheengel от Июнь 13, 2007, 23:32
если упадет при удалении - значит не надо...
какие проблемы? :)


Название: Утечка памяти
Отправлено: pakulo от Июнь 13, 2007, 23:52
Та проблем нет... просто вот пример посмотрел, там так... решил узнать удаляет ли КуТе... просто еще вот что.. удаляю drag, ошибок не выдает вроде... удаляю mimeData вылетает... оказалось КуТе mimeData удаляет а обьект drag нет, вот решил спросить что народ думаю.. всем спасибо!


Название: Утечка памяти
Отправлено: Gryz от Июнь 14, 2007, 01:38
написано же в ассистанте
Цитировать
QDrag::setMimeData ( QMimeData * data )
Sets the data to be sent to the given MIME data. Ownership of the data is transferred to the QDrag object.


Название: Утечка памяти
Отправлено: pakulo от Июнь 16, 2007, 07:36
Цитата: "SABROG"
а в стеке нельзя его создать ?

Код:

QDrag drag;
drag.start();

QMimeData mimeData;
drag.setMimeData(mimeData);


Нельзя, нужно именно в динамической памяти создавать...


Название: Утечка памяти
Отправлено: pastor от Июнь 16, 2007, 12:55
Цитата: "pakulo"
оказалось КуТе mimeData удаляет а обьект drag нет, вот решил спросить что народ думаю.. всем спасибо!


а с чего ты взял, что Qt не удаляет обьект drag?


Название: Утечка памяти
Отправлено: pakulo от Июнь 16, 2007, 20:15
Написал delete mimeData - выдало ошибку при выполнении... написал delete drag все прошло без ошибок


Название: Утечка памяти
Отправлено: pastor от Июнь 17, 2007, 10:12
Цитата: "pakulo"
Написал delete mimeData - выдало ошибку при выполнении... написал delete drag все прошло без ошибок


Если это ответ на мой предыдущий пост, то это заблуждение, что если прога не упала, значит Qt не удаляет этот объект. Если у объекта назначен парент, Qt сама удалит его. Но я могу и самостоятельно удалить объект с парентом, при этом прога не упадёт, из-за двойного удаления объекта. Qt разруливает такую ситуацию.

Вот почему падает прога, при удалении mimeData:
Код:
Note that setMimeData() assigns ownership of the QMimeData object to the QDrag object. 


Вот примечание по созданию drag:
Код:
The QDrag must be constructed on the heap with a parent QObject to ensure that Qt can clean up after the drag and drop operation has been completed.


имхо, никакой утечки памяти нет