Название: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 13:37 Здравствуйте, друзья...
Тщетно пытаюсь понять вот это: Код: #include <QApplication> При закрытии окна получаю вот это: *** glibc detected *** ./question: free(): invalid pointer: 0xbfc0066c *** Где-то память освобождается дважды, а где и почему не хватает знаний/опыта/мозга. Ткните носом, пожалуйста... :-\ Название: Re: Порядок создания объектов Отправлено: ilyagoo от Февраль 11, 2011, 13:47 assistant говорит
void QWidget::setLayout ( QLayout * layout ) The QWidget will take ownership of layout это значит, что при разрушении виджета лэйаут им убивается, а он у тебя создан в стеке. Название: Re: Порядок создания объектов Отправлено: Пантер от Февраль 11, 2011, 13:54 Т.е. при разворачивании стека сначала убивается виджет, который грохает своих детей (в данном случае лайот), а потом грохается лайот (который уже грохнут).
Название: Re: Порядок создания объектов Отправлено: ilyagoo от Февраль 11, 2011, 13:59 а в первом рабочем варианте этого не происходит, т.к. лэйаут умирает первым и удаляет себя из родителя.
Название: Re: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 14:19 В очередной раз проблема в RTFM :)
Спасибо, друзья. Все понятно с этим... Название: Re: Порядок создания объектов Отправлено: GreatSnake от Февраль 11, 2011, 14:42 4-й вариант ничем не отличается от 3-го :)
Название: Re: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 17:01 Это из-за умных указателей?
Название: Re: Порядок создания объектов Отправлено: GreatSnake от Февраль 11, 2011, 17:09 Цитировать Это из-за умных указателей? Да нет, причём здесь умные указатели? Да и где вы их видите?Просто порядок создания ни от кого независящих объектов в куче не имеет значения. Название: Re: Порядок создания объектов Отправлено: Fat-Zer от Февраль 11, 2011, 18:15 Это из-за умных указателей? скорей как раз потому, что такие не применяются ;)Название: Re: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 18:17 А вот в последнем четверостишии, кто первым будет убит при завершении программы,
layout или widget? Если первым будет убит widget, то он потянет за собой layout. Что же после этого будет освобождаться вместо layout? Название: Re: Порядок создания объектов Отправлено: Fat-Zer от Февраль 11, 2011, 18:21 А вот в последнем четверостишии, кто первым будет убит при завершении программы, в последнех двух четверостишьях никто не умрёт, так как вы создали всё на куче, но не вызвали delete; т.е. диструктор ни для того ни для другого вызываться не будет. дефакто это мемори лик, правда не страшный совсем.layout или widget? Если первым будет убит widget, то он потянет за собой layout. Что же после этого будет освобождаться вместо layout? Название: Re: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 18:31 А если руками уничтожить?
Код: delete widget; Название: Re: Порядок создания объектов Отправлено: GreatSnake от Февраль 11, 2011, 18:33 Цитировать А если руками уничтожить? Всё будет хорошо, т.к. Qt об этом уже позаботилась)Название: Re: Порядок создания объектов Отправлено: Fat-Zer от Февраль 11, 2011, 18:37 А если руками уничтожить? надо попробовать... скорей всего сигфолт будет...Код: delete widget; Название: Re: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 18:53 Я тоже на это надеялся. Местами менял. Но этого не произошло :)
Название: Re: Порядок создания объектов Отправлено: pretender424 от Февраль 11, 2011, 18:54 Под заботой Qt я и имел в виду умные указатели в их классах...
|