Russian Qt Forum
Июнь 15, 2024, 23:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] утечка памяти  (Прочитано 12498 раз)
Bepec
Гость
« Ответ #30 : Август 01, 2013, 13:10 »

По второму вопросу - можно и достаточно большие объекты в стеке создавать. Где то видел размер стека по умолчанию, но не могу сказать.

PS пара десятков виджетов с графиками спокойно создаются в стеке Подмигивающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



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

вы меня простите за примитивные на ваш взглят вопросы, но мне нужна помощь в понимании, а раздел соответствующий.
вообще-то раздел соответствующий для Qt, а не для С++
Записан

Изучением 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
Majestio
Гость
« Ответ #32 : Август 04, 2013, 16:20 »

Не найду в доках, в каком месте описан механизм регистрации потомков в родителе. Я вот об этом...
Там один метод setParent.
А сам механизм тривиален.

Попробовал примерчик:

Код
C++ (Qt)
A *varA = new A();
B *varB = new B(varA);
delete varA;
 

Вывод qDebug:

A-constructor
B-constructor
A-destructor
B-destructor

Все верно. Регистрируется как родитель и удаляется родителем. Но ... почему последних два в таком порядке. Логичнее наверное сперва удалить всех потомков, потом только удалиться самому? Почему так?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #33 : Август 04, 2013, 16:27 »

Логичнее наверное сперва удалить всех потомков, потом только удалиться самому? Почему так?
А так и происходит. Вызывается ваш деструктор A, который пишет сообщение, только потом вызывается деструктор QObject, который освобождает детей.
Записан
Majestio
Гость
« Ответ #34 : Август 04, 2013, 19:51 »

Логичнее наверное сперва удалить всех потомков, потом только удалиться самому? Почему так?
А так и происходит. Вызывается ваш деструктор A, который пишет сообщение, только потом вызывается деструктор QObject, который освобождает детей.

Все верно, запутался - думал порядок как и с классическим наследованием  Смеющийся

Пример без QObject. Два класса - A, B (наследуется от А), на следующем коде:

Код
C++ (Qt)
B *b = new B();
delete b;
 

Порядок симметричный:

A-Constructor
B-Constructor
B-Destructor
A-Destructor

Если бы А наследовался от QObject, значит дальше бы пошли деструкторы от чайлдов.
« Последнее редактирование: Август 04, 2013, 19:53 от Majestio » Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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