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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT/C++ memory management  (Прочитано 3878 раз)
qtUser
Гость
« : Июнь 06, 2014, 14:27 »

Я правильно понимаю, что если в приложение QT все классы являются наследниками QObject, а все объекты имеют назначенного родителя и образуют дерево, то думать об удаление объектов в QT вообще не надо?
Если да, есть ли что-то похожее в стандартном C++ (паттерны или еще какие идиомы)?
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Июнь 06, 2014, 14:42 »

1. Да
2. Нет
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Июнь 06, 2014, 16:34 »

1. если задашь объекту родителя, то он будет; не задашь — придется удалять руками
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Июнь 06, 2014, 18:30 »

то думать об удаление объектов в QT вообще не надо?
Это не совсем так. Думать все равно придется. Улыбающийся
То, что у объекта есть родитель, который его уничтожит при своем разрушении - это конечно замечательно. Но часто бывает так, что этот родитель живет все время работы программы, а значит удалять объекты он будет только в момент завершения программы. Т.е. если вы порождаете объекты и назначаете им родителя, который будет жить все время работы программы, то по сути вы получаете постоянную утечку памяти в процессе работы программы.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #4 : Июнь 07, 2014, 11:06 »

1. если задашь объекту родителя, то он будет; не задашь — придется удалять руками
Объект с родителем можно удалять вручную оператором delete?
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
« Ответ #5 : Июнь 07, 2014, 12:17 »

Можно, но при удалении родителя будет исключение Веселый
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #6 : Июнь 07, 2014, 12:37 »

Объект с родителем можно удалять вручную оператором delete?
Можно, смотрим исходники:
qobject.cpp
Код
C++ (Qt)
QObject::~QObject() {
   ...
   if (d->parent)        // remove it from parent object
       d->setParent_helper(0);
}
 
Можно, но при удалении родителя будет исключение Веселый
Какое еще исключение?
« Последнее редактирование: Июнь 07, 2014, 13:17 от Johnik » Записан
Bepec
Гость
« Ответ #7 : Июнь 07, 2014, 13:08 »

Johnik - прошу указывайте версию Qt. У меня указана под ником слева, а у вас?

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

update: видимо у меня были какие то собственные заморочки Улыбающийся Ну да и ладно.
« Последнее редактирование: Июнь 07, 2014, 13:15 от Bepec » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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