Так что у меня класс с именем AppointmentSchedule
который имеет следующий тип:Вызывает ли QList вызов функции очистки памяти динамически выделенных объектов, которые хранятся в QList?
namespace Ui {
class AppointmentSchedule;
}
class AppointmentSchedule : public QWidget
{
Q_OBJECT
public:
explicit AppointmentSchedule(QWidget *parent = 0);
~AppointmentSchedule();
Ui::AppointmentSchedule *ui;
};
ui
этого класса состоит из двух объектов типа QLabel
и двух объектов типа QDateTimeEdit
. Во внешнем классе мне нужно иметь QList
динамически выделенных объектов типа AppointmentSchedule
. Я добавлю динамически выделенные объекты в QList
, как показано ниже.
QList<AppointmentSchedule*> scheduleList;
foreach (QDate date, dates)
{
AppointmentSchedule * newSchedule = new AppointmentSchedule(this);//Allocation of memory
QDateTime sDateTime(date, QTime(8, 0, 0));
newSchedule->ui->appointmentStartDateTimeEdit->setDateTime(sDateTime);
QDateTime eDateTime(date, QTime(8, 15, 0));
newSchedule->ui->appointmentEndDateTimeEdit->setDateTime(eDateTime);
scheduleList.append(newSchedule);
}
Если я называю clear()
функцией QList
как это:
scheduleList.clear();
Будет ли освободить всю память я выделил?
Спасибо.
Спасибо, я скоро приму ваш ответ. Я действительно следовал тому, что вы сказали о том, чтобы вручную удалить их даже до того, как вы написали ответ. Итак, на этом мы согласны. :) –
Но в представленном коде отсутствует утечка памяти. Объекты AppointmentSchedule имеют родительский элемент, поэтому эти объекты будут удалены, когда родительский объект будет уничтожен. –
@ the_naive Также обратите внимание на ответ Кирилла. Вы устанавливаете родительские имена non-nullptr для своих объектов, поэтому деструктор родителя удалит их, и вам не нужно будет удалять их вручную. Это особенность иерархии объектов Qt и является распространенным способом удаления вложенных виджетов. – Sergey