当前位置: 代码迷 >> QT开发 >> 困惑于Qt中的new与delete
  详细解决方案

困惑于Qt中的new与delete

热度:27   发布时间:2016-04-25 04:13:17.0
迷惑于Qt中的new与delete
举个例子,刚学Qt的例子
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel *label = new QLabel;
    label->show();
    a.exec();

    return 0;
}

这里面的label是new出来的,那么需要delete吗?
我的疑问是,在Qt中什么时候需要delete呢?

------解决方案--------------------
引用:
C/C++ code123456789101112131415    QApplication a(argc, argv);     QLabel *label = new QLabel();     label->show();     a.exec();     delete label;     label= NULL;     return 0;
        ……

就这个例子来讲,根本不需要这样,内存是可控的
------解决方案--------------------
很显然,楼主不是困惑的这里的代码,而是困惑QT里面用的delete太少了。
QT里面使用了QObject来管理子对象。形成了所谓的对象树。只要是QObject的子类,就可以指定一个parent对象,当这个parent销毁的时候,可以自动销毁子对象。所以你在使用QT的时候几乎很少使用手动delete。因为只需要管理parent对象就行了。QT中的例子一般是这样的。(改一下你的代码)

int main(int argc, char *argv[]){ 
   QApplication a(argc, argv);
   QWidget wid; 
   QLabel *label = new QLabel(&wid);  
   wid.show(); 
   a.exec(); 
   return 0;}

因为wid是label的parent,当程序退出的时候wid销毁时,会调用label的析构函数的,所以达到了析构label的目的。
------解决方案--------------------
我之前也一直纠结于这个问题,后来总结了一下,或许有点帮助http://blog.csdn.net/envenler/article/details/8020064
  相关解决方案