|
1Qter豆
最近在学习QChart的相关示例,对内存的管理机制产生了疑问。
在网上查找了相关Qt内存释放的问题,大致归纳如下: 只要new出来的对象是QObject,且跟父窗口具有父子关系,当父窗口被销毁的时候,子控件会自动被delete。
- Widget::Widget(QWidget *parent)
- : QWidget(parent),
- {
- QGridLayout *gridLayout = new QGridLayout( this );
- ...
- m_label = new QLabel( tr("示例表格"), this );
-
- gridLayout->addWidget(m_label, 0, 0);
-
- //什么时候可以不用delete对象。
- //Qt具有半自动内存管理机制,
- //必须是QObject或其派生类的对象,并指定了父窗口(父子关系)。
- QChartView *chartView;
-
- chartView = new QChartView(createLineChart());
- gridLayout->addWidget(chartView, 1, 0);
-
- chartView = new QChartView(createBarChart(m_valueCount));
- gridLayout->addWidget(chartView, 2, 0);
-
- setLayout( gridLayout );
- }
复制代码
代码片段如上,QChartView的显示方式是按照Qt中的示例代码来写的。
是否代码中的m_labe,gridLayout 因为指定了父窗口,所以在父窗口被销毁的时候能被自动释放,而chartView和createLineChart(),createBarChart(m_valueCount)函数中new出来的对象不能被正常释放。不知这样理解对不对。如果是这样,那程序中不是产生了内存泄漏吗?
|
最佳答案
查看完整内容
QObject或其派生类的对象,指定父对象指针后,可以不用显示delete销毁对象,qt自动完成。其余的情况,还是需要自己delete的
|