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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Выход с приложения  (Прочитано 17033 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #30 : Август 12, 2010, 21:53 »

Ясно, можно тогда совет, когда выделять память с помощью указателей, а когда просто статически создавать объекты? Улыбающийся
Ну слово "статически" значит совсем другое. Вероятно Вы хотели спросить когда лучше объявить объект
Код
C++ (Qt)
void Test( void )
{
 MyDialog dlg;
 ...
}
 
а когда создать указатель на него
Код
C++ (Qt)
void Test( void )
{
 MyDialog * dlg = new MyDialog();
 ...
 delete dlg;
}
 
Эти варианты практически равноценны. В первом случае удобно выскакивать их ф-ции через return, во втором надо не забыть delete перед каждым возвратом. Объявляя локальный объект Вы тем самым говорите что он живет только внутри ф-ции Test. Создание указателя может рассматриваться как намек что созданный объект может жить и дальше, без ф-ции Test и кто-то возьмет ответственность за его удаление (часто parent)

« Последнее редактирование: Август 12, 2010, 21:57 от Igors » Записан
blood_shadow
Гость
« Ответ #31 : Август 12, 2010, 21:59 »


Эти варианты практически равноценны. В первом случае удобно выскакивать их ф-ции через return, во втором надо не забыть delete перед каждым возвратом. Объявляя локальный объект Вы тем самым говорите что он живет только внутри ф-ции Test. Создание указателя может рассматриваться как намек что созданный объект может жить и дальше, без ф-ции Test и кто-то возьмет ответственность за его удаление (часто parent)



Кажется начал понимать, а если объект создается в конструкторе другого класса, без помощи new, он тоже есть локальным?
Записан
BRE
Гость
« Ответ #32 : Август 12, 2010, 22:01 »

Кажется начал понимать, а если объект создается в конструкторе другого класса, без помощи new, он тоже есть локальным?
Да, и будет разрушен при выходе из области видимости aka конструктора.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #33 : Август 12, 2010, 22:03 »

Кажется начал понимать, а если объект создается в конструкторе другого класса, без помощи new, он тоже есть локальным?
Ну да  Улыбающийся

Немного не понял, например у нас есть только одна ф-ция main.cpp в которой мы создаем объект так зачем нам может понадобится объект, время жизни которого будет больше чем самой программы? не могу даже придумать конкретное применение и тут другой вопрос возникает как мы освободим память, если программа завершилась?
Нет такого "сама программа". Есть ф-ция main, a есть то что выполняется до нее и после нее

Записан
blood_shadow
Гость
« Ответ #34 : Август 12, 2010, 22:08 »

Все теперь все окончательно дошло всем спасиба  Веселый
Записан
SASA
Гость
« Ответ #35 : Август 13, 2010, 10:06 »

Код:
насчет указателей я всегда освобождаю память ток делаю зачистку када прога уже готова
Советую отказаться от этой практики Улыбающийся

Код:
существуют методики, позволяющие "схитрить" перед компилятором.
Мне кажется, использование "хитрых" методик ведёт к большим ошибкам, чем утечки памяти.
Записан
niXman
Гость
« Ответ #36 : Август 13, 2010, 13:57 »

Цитировать
Только причем здесь это?
да так, не при чем.

Цитировать
Мне кажется, использование "хитрых" методик ведёт к большим ошибкам, чем утечки памяти.
угу, вам кажется.
Записан
BRE
Гость
« Ответ #37 : Август 13, 2010, 14:45 »

Цитировать
Только причем здесь это?
да так, не при чем.
+1. Абсолютно не причем.  Подмигивающий
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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