0

我试图了解 Qt 如何处理其小部件的实例化对象,这些小部件在用户定义的类中使用动态内存分配。

在下面,您可以看到main.cpp和来自 Qt 安装示例项目的用户定义类“ Foo ”的一部分。
作为一个新手,我知道每当我们分配动态内存时,我们都必须delete在代码中的某个地方看到。问题是在哪里删除在下一行的Foo.cppdelete中分配的动态内存?
QChartView *mychart= new QChartView();

主文件

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QMainWindow window;
    Foo *myobj = new Foo();
    window.setCentralWidget(myobj);
    window.resize(900, 600);
    window.show();
    return a.exec();
}

Foo.cpp

Foo::Foo(QWidget *parent) :
    QWidget(parent)
{
    QChartView *mychart= new QChartView();
...
4

1 回答 1

0
  1. 家长班不处理他们的孩子。类处理他们拥有的对象。任何拥有的 动态分配对象Foo都应该在Foo::~Foo().
  2. 同样,由 拥有的 动态分配的对象QMainWindowQMainWindow. 当您调用时,window.setCentralWidget(myobj)您传递to指向的任何内容的所有权,因此当被销毁时,它会在其析构函数中删除该对象。这反过来会导致被指向的对象所拥有的动态分配的对象被清理(参见第 1 页)myobjwindowwindowmyobj
于 2019-04-23T20:23:56.817 回答