QWidget
{
private:
Scene* pScene;
QDMGraphicsView* pgrView;
QVBoxLayout* pvbLayout;
};
Я насоздавал в констукторе разных объектов динамически. И если я их не удалю будет же утечка, верно?
Давайте смотреть. QDMGraphicsView это QWidget, QVBoxLayout это QLayout. Про них в этой статье написано А вот Scene что такое я не знаю
Полагаю, вот ответ на мой вопрос: The layout takes over responsibility of the items added. Since QLayoutItem does not inherit QObject, we must delete the items manually. In the destructor, we remove each item from the list using takeAt(), and then delete it. Спасибо большое за ответ!
Это про QLayoutItem, если вы реализуете свой QLayout. QLayout наследуется от QObject
Правильно ли я понял идею, что у объектов которые наследуются от QObject/QWidget, за удаление отвечает как раз-таки родитель?
да. родитель удаляет своих детей
Еще одно небольшое уточнение, у меня есть класс: class Smth : public QWidget { }; Smth* ptr = new Smth(); QWidget, по логике не должен же удалять мой кастомный класс, верно? А значит лучше взять не сырой указатель, или вручную его удалить? Типа того: std::unique_ptr<Smth> ptr = std::make_unique<Smth>();
эм... в данном примере Smth не чайлд QWidget
Если затем вы установите этот виджет на layout, то у него появится родитель, а значит и ваш виджет в дальнейшем удалиться. А использовать обычный unique_ptr на QObject'ах можно только с кастомным делитером, который внутри зовет deleteLater.
Обсуждают сегодня