s
6 сентября 2023 г. 16:18

Вопрос: Нужно ли в деструкторе удалять динамически созданные QT-объекты. Напр:

class A{
QFrame * dateFrame;

public:

A() {
dateFrame = new QFrame;
}

// вопрос почему в примерах, идущих с QT нет удаления создаваемых объектов?
//Возникает предположение, что эти объекты кдаляются автоматически, но как ?
~A() {
delete dateFrame;
}

};

2

Вам это нравится? Поделитесь в социальных сетях!

1
Evgenii Legotckoi
  • 6 сентября 2023 г. 16:35

Зависит от того, как эти объекты были созданы.

Если вы передаёте указатель на parent объект, то не нужно, Ядро Qt само разрулит удаление, если нет, то нужно удалять вручную, иначе будет утечка памяти.

Например ваш код требует удаления в деструкторе, если не удалить вручную, то будет утечка памяти.

Если же ваш код будет выглядеть так

  1. A(QWidget* parent) : QWidget(parent) {
  2. dateFrame = new QFrame(this);
  3. }

То в данном случае удалять в деструкторе ничего не нужно. Qt сам разрулит удаление и утечки памяти не будет.

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь