Я знаю, что в Qt много вопросов об управлении памятью. Также я читаю эти вопросы:
Но в моем случае я снова запутался!
У меня есть QTableWidget
с именем myTable
. Я добавляю к нему виджеты времени выполнения setCellWidget
:
void MyClass::build()
{
for (int i=LOW; i<HIGH; i++)
{
QWidget *widget = new QWidget(myTable);
//
// ...
//
myTable->setCellWidget(i, 0, widget);
}
}
Затем я удаляю все элементы, как показано ниже:
void MyClass::destroy()
{
for (int i = myTable->rowCount(); i >= 0; --i)
myTable->removeRow(i);
}
Эти методы вызывают много раз в течение длительного времени. И myTable
как родитель этих виджетов будет жить в течение всей жизни программы.
Метод дозы destroy()
полностью и автоматически освобождает память? Или я delete
выделил виджеты сам, как показано ниже?
void MyClass::destroy2() // This maybe causes to crash !!
{
for (int i = myTable->rowCount(); i >= 0; --i)
{
QWidget *w = myTable->cellWidget(i, 0);
delete w;
myTable->removeRow(i);
}
}