Различает ли QObject дочерние элементы стека и кучи при удалении?

Согласно документации Qt:

QObjects организуются в деревья объектов. Когда вы создаете
QObject с другим объектом в качестве родителя, объект будет автоматически
добавить себя в список дочерних () родителей. Родитель становится владельцем
объекта; то есть он автоматически удалит своих потомков в своем
деструктор.

Для меня это означает, что когда QObject удаляется, он проходит и вызывает delete во всех указателях, которые он хранит в своем дочернем списке.

Тем не менее, нет необходимости для динамического размещения дочерних элементов, и вполне законно строить деревья QObject с объектами, выделенными из стека.

Согласно стандартным спецификациям, вызов delete для указателя, который не указывает на динамически размещенный объект, является неопределенным поведением, которое может привести к чему угодно, от «ничего» до сбоя программы.

IMO маловероятно, что QObject, который в значительной степени является основой почти всей коллекции классов Qt, полагается на то, что может привести к неопределенному поведению.

Итак, различает ли QObject дочерние элементы стека и кучи при удалении? И если да, то как именно?

7

Решение

Тем не менее, нет необходимости для детей динамически распределяться,
и вполне законно строить деревья QObject с выделенным стеком
объекты.

Не виделись QObject :: ~ QObject ():

Предупреждение: Все дочерние объекты удаляются. Если какой-либо из этих объектов включен
стек или глобальный, рано или поздно ваша программа потерпит крах.

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]