关于qt内存回收

[转]关于qt内存回收

作者: 平繁  来源: 博客园  发布时间:2009-08-14 16:37  阅读:333 次   原文链接    [收藏]  
在栈上用new分配的内存,为什么没有用delete释放?

从HelloQt说起


#include <qapplication.h>

#include <qlabel.h>

int main( int argc, char **argv )

{

    QApplication app( argc, argv );

    QLabel *label=new QLabel(“Hello QT!”,0);

    app.setMainWidget( label );

    label->show();

    return a.exec();

}

这里label是new出来的一个指针变量,也就是在栈上申请的内存,在C++语言里,明确过,在栈 上分配的内存是必须认为的用delete释放的,防止内存泄露。这里为什么没有呢。后来看到有的QT程序也有明确使用delete释放内存的。这里越发不 解了。后来,查到原来是QT扩展了C++,如果指针对象有父对象时,可以不用显式释放内存。我们需要显式释放的是那些没有父对象的孤立的指针。但上面这个 例子并没有继承父对象,注意第二个指针,指向父对象的指针参数为0,即没有父对象,但是setMainWidget把它设为了主窗口部件,它就和程序同步 了,当程序退出的时候自动释放,孩子对象的释放也是如此,在QT中扩展了C++ ,如果父亲对象无效时,子对象自动释放分配的内存。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值