创建课程时,我应该在哪里添加/删除新内容

时间:2019-04-22 12:31:30

标签: c++ qt

我有一部分经过测试和工作的代码,现在,我想将其设为一个类,以使代码更简洁。 以下代码创建一个包含矩形的场景并将其显示在小部件“ graphicview”上

QGraphicsScene *scene = new QGraphicsScene;
QGraphicsRectItem *rect = new QGraphicsRectItem();
rect->setRect(0,0,100,100);
scene->addItem(rect);
ui->graphicsView->setScene(scene);

我现在想要的是创建一个包含该场景的类,这样我只需要调用即可:

MyClass *myscene = new MyClass;
ui->graphicsView->setScene(myscene->scene)

问题是,在MyClass类中,我应该有一个声明为QGraphicsScene *scene = new QGraphicsScene;的私有参数,还是只有一个私有参数QGraphicsScene *scene然后在构造函数*scene=new QGraphicsScene

与MyScene的析构函数中删除的位置相同吗?

edit:基于答案,我试图在没有new的情况下重新编写代码:

QGraphicsScene scene;
QGraphicsRectItem rect;
rect.setRect(0,0,100,100);
scene.addItem(&rect);
ui->graphicsView->setScene(&scene);

但是此代码不起作用(小部件“ graphicView”不显示任何内容),我发现的所有关于Qt的示例都使用new运算符。我想念什么?

2 个答案:

答案 0 :(得分:2)

在性能和清晰度考虑因素允许的范围内,尽量避免使用(原始)指针。例如,在您的代码中,不必使用指针。而是将场景定义为课程的成员:

class MyCalss
{
...
  QGraphicsScene scene;
};

然后将其设置为视图:

MyClass myscene;

ui->graphicsView->setScene(&myscene.scene);

因此,从现在开始,在使用指针之前,请先问自己一个问题,是否有必要使用指针?如果必须使用指针,请也考虑一下smart pointers

答案 1 :(得分:0)

没有“特定”的地方可以放置新的和删除的。这完全取决于您需要动态分配内存(新的)的位置,一旦作业od动态分配的内存(变量)结束,您就需要释放该(删除),请记住该变量不会在其他任何地方使用因为它会导致不良行为。

如果在创建类的每个对象时都需要从一开始就动态分配类变量,请在构造函数中进行操作。同样,如果在整个对象生命周期中都使用了该变量,请在析构函数中将其删除。这只是一个非常高级的想法。我建议阅读this,并进一步阅读有关指针(智能指针)和动态内存分配的信息