Russian Qt Forum
Ноябрь 24, 2024, 14:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Утечка памяти  (Прочитано 6502 раз)
pakulo
Гость
« : Июнь 13, 2007, 19:37 »

перетаскиваю объект
QDrag *drag = new QDrag(this);
...
drag->start();

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

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

QMimeData *mimeData = new QMimeData;
drag->setMimeData(mimeData);
Записан
SABROG
Гость
« Ответ #1 : Июнь 13, 2007, 21:01 »

а в стеке нельзя его создать ?

Код:

QDrag drag;
drag.start();

QMimeData mimeData;
drag.setMimeData(mimeData);


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

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Июнь 13, 2007, 23:32 »

если упадет при удалении - значит не надо...
какие проблемы? Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pakulo
Гость
« Ответ #3 : Июнь 13, 2007, 23:52 »

Та проблем нет... просто вот пример посмотрел, там так... решил узнать удаляет ли КуТе... просто еще вот что.. удаляю drag, ошибок не выдает вроде... удаляю mimeData вылетает... оказалось КуТе mimeData удаляет а обьект drag нет, вот решил спросить что народ думаю.. всем спасибо!
Записан
Gryz
Гость
« Ответ #4 : Июнь 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
Гость
« Ответ #5 : Июнь 16, 2007, 07:36 »

Цитата: "SABROG"
а в стеке нельзя его создать ?

Код:

QDrag drag;
drag.start();

QMimeData mimeData;
drag.setMimeData(mimeData);


Нельзя, нужно именно в динамической памяти создавать...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Июнь 16, 2007, 12:55 »

Цитата: "pakulo"
оказалось КуТе mimeData удаляет а обьект drag нет, вот решил спросить что народ думаю.. всем спасибо!


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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pakulo
Гость
« Ответ #7 : Июнь 16, 2007, 20:15 »

Написал delete mimeData - выдало ошибку при выполнении... написал delete drag все прошло без ошибок
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Июнь 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.


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

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.