Управление памятью для переменной члена класса в Qt

Я пишу программу просмотра изображений с Qt, основанную на функции QGraphicsScene в Qt. Я создаю модель каждого изображения в классе с именем ImageModel и управляю отображением изображения в классе с именем ImageView. Класс ImageView выглядит следующим образом (просто интересная часть):

class ImageView
{
public:
ImageView(QWidget *parent);

QGraphicsView * getView() {return view; }

private:

//qgraphics scene elements
QGraphicsScene *scene;
QGraphicsView *view;
QGraphicsPixmapItem *curItem;};

Конструктор для класса выглядит следующим образом:

ImageView::ImageView(QWidget *parent)
{

//create scene and view with parent the main window
//such that the memory management is done by qt
scene = new QGraphicsScene(parent);
view = new QGraphicsView(parent);

view->setScene(scene);
}

Также у меня есть указатель на ImageView в моем происхождении QMainWindow.

Мой вопрос: должен ли я позволить Qt управлять памятью, установив главное окно в качестве родителя вида и сцены, или я должен сам позаботиться об управлении памятью (оставить вид и сцену без родителей и удалить их в классе деструкторов)? Что такое хорошая стратегия в этом случае?

1

Решение

Если вы хотите, чтобы представление было вложено в главное окно, вы иметь сделать это ребенком.

Для вашего общего вопроса это действительно сводится к желаемому времени жизни объекта и семантике владения. Если вы не хотите, чтобы представление / сцена переживали главное окно, тогда да, это должны быть дети. У вас все еще есть возможность удалить их другими способами в более раннее время.

0

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

Если они вам больше не нужны, есть ли у вас причина держать их рядом в течение всей жизни родителя? Если нет, я не понимаю, почему вы хотите оставить эту память выделенной.

Если вам больше не нужен ресурс, вы должны освободить его, если у вас нет причин не делать этого. Обратите внимание, что вы можете удалить их независимо от того, есть у них родитель или нет; когда вы удаляете объект, у которого есть родитель, он удаляет себя из списка потомков родителя.

0

Пусть Qt позаботится об удалении. Это удобно и безопасно. Не храните ссылки, которые вам не нужны. Например, добавление макета и сохранение ссылки для удаления не стоит.

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