Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Вопрос по созданию объектов 
V
    Опции темы
yngwie19
Дата 5.6.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Всем привет подскажите как лучше создавать новые виджеты
так
Код

QSpinBox splin

или
Код

QSplin *splin = new QSplib;

В книгах по-разному. Влияет ли это на что-нибудь?

PM MAIL   Вверх
mes
Дата 5.6.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(yngwie19 @  5.6.2009,  21:33 Найти цитируемый пост)
Влияет ли это на что-нибудь?

Да, влияет на время жизни. В первом случае объект погибнет при выходе за границы блока. 



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 5.6.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



yngwie19

А вопрос то с QT никак не связан smile

Цитата(mes @  5.6.2009,  23:28 Найти цитируемый пост)

Да, влияет на время жизни. В первом случае объект погибнет при выходе за границы блока. 

А во втором он будет жить пока его не удалят.
PM   Вверх
yngwie19
Дата 6.6.2009, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Это Я все понимаю. Как принято в Qt - создавать объект через указатель или нет.
PM MAIL   Вверх
W4FhLF
Дата 6.6.2009, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



Цитата(azesmcar @  5.6.2009,  23:32 Найти цитируемый пост)
А вопрос то с QT никак не связан


Очень даже связан.

Читать раздел assistant'a "Object Trees and Object Ownership"

Цитата(yngwie19 @  6.6.2009,  06:56 Найти цитируемый пост)
Как принято в Qt - создавать объект через указатель или нет.


Если объект имеет parent'a то такой объект должен быть создан в куче (через указатель тобишь). За уничтожением такого объекта будет следить система Qt, при уничтожении парента все наследники так же будут уничтожены. 



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
mes
Дата 6.6.2009, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(W4FhLF @  6.6.2009,  07:29 Найти цитируемый пост)
при уничтожении парента все наследники так же будут уничтожены. 

"Наследник" имеет некоторое другое значение. В данном случае подходит слово "ребенок".




--------------------
PM MAIL WWW   Вверх
W4FhLF
Дата 6.6.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



mes, да child'ы в оригинальной терминологии. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
azesmcar
Дата 6.6.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(W4FhLF @  6.6.2009,  08:29 Найти цитируемый пост)

Очень даже связан.

Читать раздел assistant'a "Object Trees and Object Ownership"

Ну тогда был бы уместнее вопрос - как принято и как правильнее делать это в QT.
А так ощущение что автор спрашивает разницы между созданием обьектов в куче и в стеке.
PM   Вверх
yngwie19
Дата 6.6.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(yngwie19 @  6.6.2009,  06:56 Найти цитируемый пост)
Это Я все понимаю. Как принято в Qt 

Потом уточнил.
Значит лучше всегда создавать объекты в куче. Они что по размерам очень большие? в стеке места для всех не хватит?
PM MAIL   Вверх
azesmcar
Дата 6.6.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(yngwie19 @  6.6.2009,  11:08 Найти цитируемый пост)
Значит лучше всегда создавать объекты в куче. Они что по размерам очень большие? в стеке места для всех не хватит? 

Смотря какие обьекты. 
W4FhLF сказал какие конкретно обьекты надо создавать в куче. QString например в куче создавать не надо.
Тут речь не про то, поместится или нет. Просто QT построена на принципе Parent->Child и при удалении Parent-а все его потомки удаляются автоматически. Удаляются оператором delete. Проверьте что будет если написать
Код

class A{};
A t;
delete &t;

думаю вопросы отпадут smile

Это сообщение отредактировал(а) azesmcar - 6.6.2009, 11:35
PM   Вверх
mes
Дата 6.6.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 7
Всего: 250



Цитата(yngwie19 @  6.6.2009,  10:08 Найти цитируемый пост)
Значит лучше всегда создавать объекты в куче. Они что по размерам очень большие? в стеке места для всех не хватит? 

не всегда и по большей степени не из за размера. Главное управление временем жизни.

если поймете как связаны эти две нижеприведенные цитаты, поймете и в чем дело 

Цитата(W4FhLF @  6.6.2009,  07:29 Найти цитируемый пост)
Если объект имеет parent'a то такой объект должен быть создан в куче (через указатель тобишь). За уничтожением такого объекта будет следить система Qt, при уничтожении парента все наследники так же будут уничтожены. 

Цитата(azesmcar @  6.6.2009,  10:23 Найти цитируемый пост)
Проверьте что будет если написать
Код

class A{};
A t;
delete &t;




Это сообщение отредактировал(а) mes - 6.6.2009, 12:58


--------------------
PM MAIL WWW   Вверх
chaos
Дата 6.6.2009, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



Цитата(W4FhLF @ 6.6.2009,  05:29)
Если объект имеет parent'a то такой объект должен быть создан в куче (через указатель тобишь). За уничтожением такого объекта будет следить система Qt, при уничтожении парента все наследники так же будут уничтожены.

все правельно понял: "чилда" можно удалить вручную(delete)?

просто столкнулся с итуацией: есть MainWindow, упрощая задачу, раз в минуту необходимо открытвать диалоговое окно на 10 секунд и закрывать его, те оно само закрывается по своему внутреннему таймеру.
так вот если приложение работает долго, а оно и должно долго работать, то видно как память "утекает".
Вопрос: можно ли в диалоговом окне по закрытию делать delete this?
Если нет, то как быть тогда?


Заранее благодарен!

Добавлено через 1 минуту и 2 секунды
ЗЫ модальное диалоговое окно, те необходимо в данном случае указать парента в качестве MainWindow
PM WWW   Вверх
W4FhLF
Дата 7.6.2009, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 4
Всего: 121



chaos, а зачем для каждого раза создавать новый виджет? Почему нельзя показывать один и тот же, но с изменениями? 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
chaos
Дата 7.6.2009, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



W4FhLF, вообще можно.
больше нитересует вопрос выше.


ЗЫ переделаю на создание одного виджета smile
PM WWW   Вверх
chaos
Дата 8.6.2009, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 5
Всего: 44



так что на счет удаления объекта в ручную?
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.