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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: [РЕШЕНО] утечка памяти  (Прочитано 12835 раз)
mutineer
Гость
« Ответ #15 : Июль 31, 2013, 12:18 »

можно проверить - обнуляй указатель при объявлении и при очистке. А потом проверяй на ноль
Записан
unkeep
Гость
« Ответ #16 : Июль 31, 2013, 12:19 »

можно проверить - обнуляй указатель при объявлении и при очистке. А потом проверяй на ноль
от. то что надо! Смеющийся
Записан
unkeep
Гость
« Ответ #17 : Июль 31, 2013, 12:28 »

всем спасибо
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #18 : Июль 31, 2013, 17:32 »

чтобы постоянно не присваивать указателю 0 после удаления, можно использовать QPointer
Записан

Изучением 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
unkeep
Гость
« Ответ #19 : Август 01, 2013, 11:06 »

чтобы постоянно не присваивать указателю 0 после удаления, можно использовать QPointer
Раньше использовал QSharedPointer, но сейчас хочу понимать что за кулисами твориться)

Ещё вопрос, если память выделяется локально в функции, то после отработки память подчистится?

Код
C++ (Qt)
bool ShowMessage()
{
QMessageBox* msgBox= new QMessageBox( /* params */);
return msgBox->exec();
}
« Последнее редактирование: Август 01, 2013, 11:08 от unkeep » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #20 : Август 01, 2013, 11:27 »

если парент задан, то он удалит своих потомков в своем деструкторе, иначе нет. но можно задать виджету атрибут Qt::WA_DeleteOnClose чтобы он удалялся при закрытии.

модальные диалоги можно создавать на стеке.
Записан

Изучением 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
unkeep
Гость
« Ответ #21 : Август 01, 2013, 11:34 »

модальные диалоги можно создавать на стеке.

поясните последнюю строчку пожалуйста
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #22 : Август 01, 2013, 11:36 »

bool ShowMessage()
{
QMessageBox msgBox( /* params */); // можно и без парента
return msgBox.exec();
}
Записан

Изучением 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
unkeep
Гость
« Ответ #23 : Август 01, 2013, 12:00 »

bool ShowMessage()
{
QMessageBox msgBox( /* params */); // можно и без парента
return msgBox.exec();
}

с парентом всё понятно как раз: удалили родителя - удалились дети.
а вот если просто несколько раз ShowMessage() вызвать в программе, то будет ли msgBox удаляться?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #24 : Август 01, 2013, 12:06 »

при создании переменных на стеке их память автоматически очищается при выходе из области видимости
Записан

Изучением 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
unkeep
Гость
« Ответ #25 : Август 01, 2013, 12:11 »

как бы по идее объект не удалили, но ссылок на него не осталось так как его объявили локально в функции. во Flash например если ссылок не осталось на объект, то он удаляется через некоторое время сборщиком мусора.  а тут как?
Записан
Bepec
Гость
« Ответ #26 : Август 01, 2013, 12:15 »

Никак. Кривота программа будет полностью зависить от кривоты ваших рук.
Потерянный указатель никуда не денется до завершения работы программы.
Потерю указателей/объекта называют утечкой памяти Улыбающийся И при повторном выполнении кода память будет течь течь течь.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #27 : Август 01, 2013, 12:18 »

как бы по идее объект не удалили, но ссылок на него не осталось так как его объявили локально в функции. во Flash например если ссылок не осталось на объект, то он удаляется через некоторое время сборщиком мусора.  а тут как?
а в С++ нет никакого сборщика мусора и подсчета ссылок. поизучай язык.
Записан

Изучением 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
unkeep
Гость
« Ответ #28 : Август 01, 2013, 12:52 »

вы меня простите за примитивные на ваш взглят вопросы, но мне нужна помощь в понимании, а раздел соответствующий.
тут объект создаётся на стеке и следовательно удаляется при выходе из функции.
Код
C++ (Qt)
bool ShowMessage()
{
QMessageBox msgBox( /* params */);
return msgBox.exec();
}

а тут в куче, и следовательно надо позаботиться о его удалении
Код
C++ (Qt)
bool ShowMessage()
{
QMessageBox* msgBox= new QMessageBox( /* params */);
return msgBox->exec();
}

1)правильно ? если да то вопрос №2
2)"на стеке не следует создавать больших объектов, дабы не переполнить стек". простой модальный диалог с пару кнопками и текстом можно считать мало объёмным?
Записан
mutineer
Гость
« Ответ #29 : Август 01, 2013, 13:03 »

1) да, правильно
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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