У меня есть простой код для создания нового виджета с использованием Qt:
Dock::Dock() : QDockWidget() {
label = new QLabel(QLatin1String("TEST"));
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(label, 0, Qt::AlignTop);
layout->addStretch(-1);
QWidget* multiWidget = new QWidget();
multiWidget->setLayout(layout);
setWidget(multiWidget);
}
Где label
является приватным участником QLabel* label
. Мой вопрос: я несу ответственность за удаление label
в деструкторе Dock
?
Я попытался изменить код, чтобы label
был std::shared_ptr<QLabel>
:
Dock::Dock() : QDockWidget() {
label = std::make_shared<QLabel>(QLatin1String("TEST"));
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(label.get(), 0, Qt::AlignTop);
layout->addStretch(-1);
QWidget* multiWidget = new QWidget();
multiWidget->setLayout(layout);
setWidget(multiWidget);
}
Чтобы он автоматически удалялся при уничтожении Dock, но при закрытии программы выдается ошибка.