QT  - 讨论区

标题:Qt Tutorial 022:Qt中两种改进的指针

2014年03月13日 星期四 09:35

在现代的C++语言中,我们极力避免使用普通的指针,所以会出现各种“智能”的指针,这些指针的目的基本都是简化内存管理的工作,避免内存泄露和悬空指针的问题。

在Qt中,QPointer的特点是:当其指向的对象销毁之后,将自动指向0地址,这样就可以避免悬空指针的问题。

QScopedPointer的特点可以顾名思义,当离开指针的有效范围后,指针所指向的对象自动销毁,这就避免了内存泄露的问题。

当然,上述两个都尤其局限性,C++ 11引入了shared_ptr,我认为,这个更加智能一些。

示例代码如下:

#include <QCoreApplication>
#include <QtCore>

QByteArray file_get_contents(QString file){
    /*
     * QScopedPointer guarantees that the object
     * pointed to will get deleted when the current
     * scope disappears.
     */
    QScopedPointer<QFile> f(new QFile(file));
    f->open(QIODevice::ReadOnly);
    return f->readAll();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QFile *f=new QFile();
    /* A guarded pointer, QPointer<T>,
     * behaves like a normal C++ pointer T *,
     * except that it is automatically set to 0
     * when the referenced object is destroyed
     * */
    QPointer<QFile> pf=f;
    qDebug() << f;
    qDebug() << pf;
    delete f;
    qDebug() << (f == 0);
    qDebug() << (pf == 0);
    qDebug() << file_get_contents("D:/cpp/test.txt");
    return a.exec();
}

参考资料:

http://qt-project.org/doc/qt-5/QPointer.html

http://qt-project.org/doc/qt-5/qscopedpointer.html

http://www.cplusplus.com/reference/memory/shared_ptr/

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号