Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qtUser от Июнь 06, 2014, 14:27



Название: QT/C++ memory management
Отправлено: qtUser от Июнь 06, 2014, 14:27
Я правильно понимаю, что если в приложение QT все классы являются наследниками QObject, а все объекты имеют назначенного родителя и образуют дерево, то думать об удаление объектов в QT вообще не надо?
Если да, есть ли что-то похожее в стандартном C++ (паттерны или еще какие идиомы)?


Название: Re: QT/C++ memory management
Отправлено: Swa от Июнь 06, 2014, 14:42
1. Да
2. Нет


Название: Re: QT/C++ memory management
Отправлено: kambala от Июнь 06, 2014, 16:34
1. если задашь объекту родителя, то он будет; не задашь — придется удалять руками


Название: Re: QT/C++ memory management
Отправлено: Old от Июнь 06, 2014, 18:30
то думать об удаление объектов в QT вообще не надо?
Это не совсем так. Думать все равно придется. :)
То, что у объекта есть родитель, который его уничтожит при своем разрушении - это конечно замечательно. Но часто бывает так, что этот родитель живет все время работы программы, а значит удалять объекты он будет только в момент завершения программы. Т.е. если вы порождаете объекты и назначаете им родителя, который будет жить все время работы программы, то по сути вы получаете постоянную утечку памяти в процессе работы программы.


Название: Re: QT/C++ memory management
Отправлено: sergek от Июнь 07, 2014, 11:06
1. если задашь объекту родителя, то он будет; не задашь — придется удалять руками
Объект с родителем можно удалять вручную оператором delete?


Название: Re: QT/C++ memory management
Отправлено: Bepec от Июнь 07, 2014, 12:17
Можно, но при удалении родителя будет исключение :D


Название: Re: QT/C++ memory management
Отправлено: Johnik от Июнь 07, 2014, 12:37
Объект с родителем можно удалять вручную оператором delete?
Можно, смотрим исходники:
qobject.cpp
Код
C++ (Qt)
QObject::~QObject() {
   ...
   if (d->parent)        // remove it from parent object
       d->setParent_helper(0);
}
 
Можно, но при удалении родителя будет исключение :D
Какое еще исключение?


Название: Re: QT/C++ memory management
Отправлено: Bepec от Июнь 07, 2014, 13:08
Johnik - прошу указывайте версию Qt. У меня указана под ником слева, а у вас?

Хотя да, вы правы - такое в исходниках и у меня есть. Теперь осталось мне выяснить, как же я добивался такого результата :)

update: видимо у меня были какие то собственные заморочки :) Ну да и ладно.