Qt如何处理子类中的动态内存分配?

时间:2019-04-23 19:55:36

标签: c++ qt inheritance

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

在下面,您可以看到 main.cpp 和来自Qt安装示例项目的用户定义类“ Foo ”的一部分。
作为一个新手,我知道每当分配动态内存时,我们都必须在代码中的某个位置看到QObjects。问题是,delete会删除在中分配的动态内存吗? Foo.cpp 在下面的行中吗?
  delete

main.cpp

QChartView *mychart= new QChartView();

Foo.cpp

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();
}

1 个答案:

答案 0 :(得分:0)

  1. 父类不处理其子代。类处理拥有的对象。 {em> Foo拥有的所有动态分配的对象应在Foo::~Foo()中清除。
  2. 同样,在QMainWindow的析构函数中清除由{em {1}}拥有的动态分配对象。当您呼叫QMainWindow时,您将window.setCentralWidget(myobj)指向的任何内容的所有权传递给myobj,因此window被销毁时,它会删除该对象在它的破坏者中。反过来,这会清理由window指向的对象拥有的动态分配的对象(请参见第1页)