我有一组具有复杂关系的小部件。其中一个必须创建一个项目,我认为必须将其存储为指针。另一个是稍后创建的,接收指向项目的指针 - QGraphicsScene
- 并将其放置在 View 中。
问题:关闭时,谁(如果有的话)应该删除该项目?
Widget
:包含对 QGraphicsScene* m_scene
(派生类)及其项目进行更改的 gui 元素。
MainWidget
:包含一个放置Widget
的滚动区域,一个包含QGraphicsView
的滚动区域,以及一个工具箱。 (它被设计成可以被不同的小部件重用)
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget* w = new Widget();
MainWidget m(w);
m.show();
return a.exec();
}
MainWindow:: MainWindow(Widget *contentWidget, QWidget *parent) : QWidget(parent),
ui(new Ui:: MainWindow),
m_contentWidget(contentWidget),
m_canvas(contentWidget->getCanvas())
{
ui->setupUi(this);
ui->myView->setScene(m_canvas);
ui->editArea->insertWidget(0, m_contentWidget);
}
两个类都有
MyCanvas *m_canvas;
那么 - 在关闭时 - 应该删除哪个小部件 m_canvas
? Widget
类,谁是所有者,或者 MainWidget
类,它包含持有场景的 View ?
(在 Widget
- 逻辑所有者 - 中删除它会使程序崩溃,我的猜测是因为 MainWidget
仍然需要它作为 ui 的一部分)
最佳答案
指针的所有者 是应该执行删除的人。您已确定 Widget
是所有者,因此应由它删除资源。
Widget
是所有者似乎是合理的,因为 m_canvas
是使用 contentWidget->getCanvas()
初始化的(其中 contentWidget
属于 Widget
) 类型,这让我假设 Widget
也是调用 new
运算符的类型。
关于c++ - 对象的所有权 - 哪个小部件应该删除它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38273188/