Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 12.10.2011, 20:20 |
У кого есть родители? SameObject *parent = new SameObject(); -- у этого объекта нет родителя (его надо удалять самостоятельно) ... OtherObject * o = new OtherObject(parent); -- а у этого объекта - ЕСТЬ (его удалит родитель, когда будет сам удалятся) Посмотри внимательно на описание конструктора QObject и его наследников. Они принимают в качестве аргумента родительский объект. А внутри кода, в том числе собственных объектов, указатель на родителя передаётся в базовый класс: MyObject::MyObject(QObject *parent) : QObject(parent) -- мы передаём parent в конструктор базового класса, чтобы вся механика родительско-дочерних связей работала штатным образом. |
|
registr | Дата 11.10.2011, 21:29 |
Кстати, в твоем коде не нужно писать QVBoxLayout *mainLay = new QVBoxLayout(this); так как родительско-потомковая связь установится при this->setLayout(mainLay); |
|
registr | Дата 11.10.2011, 20:35 |
Цитата Или Вы вообще про объект MyWidget? Да-да, объект MyWidget нужно создавать нединамически, или же если есть главное окно, то тогда динамический объект класса MyWidget включается в деверо, на вершине которого нединамический объектглавного окна. Короче объект верхненго уровня всегда нужно делать в стеке, а объекты-потомки в куче. У кого есть родители? Управление памятью с помощью дерева объектов http://doc.qt.nokia.com/latest/objecttrees.html Короче, есть объекты-родители и объекты-потомки, все они связаны в дерево объектов. На вершине иерархии -- объект верхненого уровня. Когда удаляется объект-родитель, то удаляются все его объекты-потомки. В частности там объясняется, почему объекты-потомки должны быть динамическими. А объект верхнего уровня нужно создавать в стеке. |
|
silver47 | Дата 11.10.2011, 18:48 |
Цитата Как люди говорят, это мовитон Действительно все объекты верхнего уровня создают в стеке, а не в куче, т.е. нединамически Ой ли? мой же пример выше:
Где создается mainLay на стеке или на куче? Чего с ним будет, когда мы выйдем за пределы видимости? Верный ответ здесь: Цитата он удалится при закрытии программы средствами ОСьки Или Вы вообще про объект MyWidget? |
|
RazrFalcon | Дата 11.10.2011, 16:52 |
RazrFalcon, уже столько дней с Qt, а азы не знаешь. Есть немного Цитата Потому что у них есть родители, которые удаляют их при своем уничтожении. У кого есть родители? |
|
registr | Дата 11.10.2011, 13:11 |
Потому как человек, который писал пример посчитал, что небольшая утечка памяти не критична? Неа, там если детальнее разобраться с примером, то получается, что действительно создается дерево объектов. А объект верхнего уровня создан в стеке, поэтому выйдя за область видимости он удалится и удалит все дерево. PS примеры написаны профессионально, просто, как это всегда бывает, надо было только подумать над ними а смысл его удалять? он удалится при закрытии программы средствами ОСьки Как люди говорят, это мовитон Действительно все объекты верхнего уровня создают в стеке, а не в куче, т.е. нединамически |
|
Litkevich Yuriy | Дата 11.10.2011, 7:37 |
В Qt вообще деструкторы редко используются. При том у них есть свой deleteLater(). RazrFalcon, уже столько дней с Qt, а азы не знаешь. Ответ: Потому что у них есть родители, которые удаляют их при своем уничтожении. Я имел в виду динамический объект верхнего уровня, то есть на вершине иерархии. а смысл его удалять? он удалится при закрытии программы средствами ОСьки |
|
silver47 | Дата 11.10.2011, 5:06 |
Потому как человек, который писал пример посчитал, что небольшая утечка памяти не критична? | |
registr | Дата 10.10.2011, 20:20 |
Цитата Потому что у них есть родители, которые удаляют их при своем уничтожении. Простой пример: Я имел в виду динамический объект верхнего уровня, то есть на вершине иерархии. Например, Qt 4.7 Examles and Demos, OpenGL, Hello GL Example Там есть два класса GLWidget и Window. Я цитирую файл window.cpp
Объект "glWidget" динамический, но он не объект-потомок. Нужно либо указать, что он объект-потомок либо удалить его в деструкторе
Но этого в примере нет. Я не понимаю почему. Вообщем разобрался |
|
silver47 | Дата 10.10.2011, 19:20 |
Цитата Почему в Qt Examples and Demos динамические объекты не удалаются через delete в деструкторах? Потому что у них есть родители, которые удаляют их при своем уничтожении. Простой пример:
|
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 24.4.2024, 14:33 |