Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: 0x0001 от Май 05, 2010, 15:19



Название: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: 0x0001 от Май 05, 2010, 15:19
код из Qt Assistant:
Код:
 QStandardItemModel model(4, 4);
 for (int row = 0; row < 4; ++row) {
     for (int column = 0; column < 4; ++column) {
         QStandardItem *item = new QStandardItem(QString("row %0, column %1").arg(row).arg(column));
         model.setItem(row, column, item);
     }
 }
а КТО будет Освобождать Память этих Итемов (см. new QStandardItem) после Разрушении Объекта model ???


Название: Re: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: BRE от Май 05, 2010, 15:21
а КТО будет Освобождать Память этих Итемов (см. new QStandardItem) после Разрушении Объекта model ???
Он и будет, т.е. объект model.


Название: Re: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: 0x0001 от Май 05, 2010, 15:22
а КТО будет Освобождать Память этих Итемов (см. new QStandardItem) после Разрушении Объекта model ???
Он и будет, т.е. объект model.


Точно проверено ли ?


Название: Re: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: alexman от Май 05, 2010, 15:23
QStandardItemModel::~QStandardItemModel ()
Destructs the model. The model destroys all its items.


Название: Re: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: 0x0001 от Май 05, 2010, 15:24
QStandardItemModel::~QStandardItemModel ()
Destructs the model. The model destroys all its items.
ОК, поверю.. не буду проверять.....

Спасибо!


Название: Re: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: NicK от Май 07, 2010, 19:07
а что произойдет со всеми элементами модели, если вызвать model->clear()
Справка гласит:
Цитировать
void QStandardItemModel::clear ()
Removes all items (including header items) from the model and sets the number of rows and columns to zero.
освободится ли память, занимаемая элементами модели после ее очистки или перед очисткой надо вручную удалять все ее элементы?


Название: Re: А кто будет Освобождать Память ? (ItemModel / Item)
Отправлено: kibsoft от Май 07, 2010, 19:18
Цитировать
Call clear() to remove all items from the model.
Т.е. они сами удаляются.

Цитировать
void QStandardItemModel::setItem ( int row, int column, QStandardItem * item )
Sets the item for the given row and column to item. The model takes ownership of the item. If necessary, the row count and column count are increased to fit the item. The previous item at the given location (if there was one) is deleted.