大家好,用Qt没有多长时间,我想测试下我的程序是否造成了内存泄漏,
大概思路是: 我在一个函数中new了一个局部变量,但是直到这个窗口退出也没有释放掉,请问下这样会造成 一些内存泄漏吗, 谢谢, 如果泄漏了,我怎么能知道他泄漏了呢:
下面是写的一个简单的测试程序,如下
#include "widget.h"
#include <QGroupBox>
#include <QHBoxLayout>
#include <QLabel>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
creategrpbox();
QHBoxLayout *mainlayout=new QHBoxLayout;
mainlayout->addWidget(m_grpbox);
setLayout(mainlayout);
}
Widget::~Widget()
{ //我在析够函数里什么都没有做。
}
void Widget::creategrpbox()
{
m_grpbox =new QGroupBox;
QLabel *label=new QLabel("test label"); //这里new了一个指针,但是这个指针是局部变量,退出这个函数后就没有了
QHBoxLayout *layout=new QHBoxLayout;
layout->addWidget(&label);
m_grpbox->setLayout(layout);
}
------解决方案--------------------
Qt 自动回收不像Java这种,有垃圾回收机制。
Qt 自动回收是靠父子关系。父亲销毁了。他的孩子也销毁。
所以为什么 main函数 里面 main widget是分配在栈上的原因。其他new出来的东西都以这个widget作为父亲。
当程序最后结束了,main widget弹栈。。父亲被销毁。。孩子跟着被销毁。。
所以如果你自己new 出来的。没有父亲,不删除就会造成内存泄漏。
------解决方案--------------------
去看看Qt的对象树机制和QObject的内存管理管理机制就ok了。