Qt中的内存泄露

理论部分转载自 : http://blog.csdn.net/envenler/article/details/8020064

下面是代码部分:

QScopedPointer<myCls> p;
class myCls : public QWidget
{
    Q_OBJECT

public:
    explicit myCls(QWidget *parent = 0):QWidget(parent)
    {qDebug()<<"myCls::myCls ";mstr="myCls--mstr";}
    virtual ~myCls()
    {qDebug()<<"~~~myCls::myCls ";}
    QString mstr;
};
myCls *pcls = new myCls();
p.reset(new myCls(this));
运行结果:
myCls::myCls 
myCls::myCls 
~~~MainWindow::MainWindow 
~~~myCls::myCls 
---- 说明有内存泄露
同样代码改成myCls *pcls = new myCls(this);---- 没有内存泄露
class myCls : public QObject
{
    Q_OBJECT

public:
    explicit myCls(QObject *parent = 0):QObject(parent)
    {qDebug()<<"myCls::myCls ";mstr="myCls--mstr";}
    virtual ~myCls()
    {qDebug()<<"~~~myCls::myCls ";}
    QString mstr;
};
同样代码:说明没有内存泄露,说明在Qt中,维护了一张 QObject 层次关系表,父结点删除,子结点也删除

QScopedPointer<myCls,QScopedPointerArrayDeleter<myCls>> p(new myCls[5]());
心得:维护好父子关系,实在没有父子关系,就用QSharedPointer,用内存泄露工具,大都检查不出来。VLD内存泄露检测工具下载地址: http://vld.codeplex.com/releases/view/619330 对应网站上有使用说明 相关文档 : http://vld.codeplex.com/documentation ,运行的时候 ,把 D:\Program Files\Visual Leak Detector\bin\Win32 里面的内容复制到可执行EXE同级目录下。
http://jingyan.baidu.com/article/642c9d34e25cc2644b46f74b.html  -- VS起动的时候 ,加载所有的DLL 的解决方案
https://vsprojectconverter.codeplex.com/ ---VS项目转换器的下载地址


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值