当前位置: 代码迷 >> QT开发 >> Qt这么会造成内存泄漏吗
  详细解决方案

Qt这么会造成内存泄漏吗

热度:67   发布时间:2016-04-25 04:30:16.0
Qt这样会造成内存泄漏吗
大家好,用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了。
  相关解决方案