我试图了解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();
}
答案 0 :(得分:0)
Foo
拥有的所有动态分配的对象应在Foo::~Foo()
中清除。QMainWindow
的析构函数中清除由{em {1}}拥有的动态分配对象。当您呼叫QMainWindow
时,您将window.setCentralWidget(myobj)
指向的任何内容的所有权传递给myobj
,因此window
被销毁时,它会删除该对象在它的破坏者中。反过来,这会清理由window
指向的对象拥有的动态分配的对象(请参见第1页)