• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            QList內存釋放 (收集轉載及編輯)

            Posted on 2011-04-19 22:49 RTY 閱讀(3851) 評論(0)  編輯 收藏 引用 所屬分類: Qt

            QList<T> 的釋放分兩種情況:

            1.T的類型為非指針,這時候直接調用clear()方法就可以釋放了,看如下測試代碼

            #include <QtCore/QCoreApplication>#include <QList>#include <QString>
            int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    typedef struct _test    {        int id;        QString name;        QString sex;    }Por_test;    QList<Por_test>  slist;    for (int i=0;i<100000;i++)    {        Por_test s;        s.id = 1;        s.name = QString("hello World!");        s.sex = QString("男");        slist.append(s);    }    slist.clear();    return a.exec();}

            將上面代碼中的slist.clear(); 注釋掉,內存顯示為如下(任務管理器里的截圖)

            111

            如不去掉的話,內存顯示如下圖

            22222

            2.T的類型為指針的情況,這時候直接調用clear()方法將不能釋放,先看代碼

            #include <QtCore/QCoreApplication>#include <QList>#include <QString>int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    typedef struct _test    {        int id;        QString name;        QString sex;    }Por_test;    QList<Por_test *>  slist;    for (int i=0;i<100000;i++)    {        Por_test *s = new Por_test();        s->id = 1;        s->name = QString("hello World!");        s->sex = QString("男?");        slist.append(s);    }//    qDeleteAll(slist);    slist.clear();    return a.exec();}

             

            上面代碼運行后的內存情況如下圖

            3333

            說明當T的類型為指針時,調用clear()方法并不能釋放其內存

            此時void qDeleteAll ( const Container & c )方法將派上用場了,將上面代碼中的注釋去掉以后,

            再次運行程序,此時的內存情況如下圖

            4444

            通過對比靚圖,可以看出,內存已經釋放,我們再來看下qt助手中qDeleteAll 方法的說明

            void qDeleteAll ( ForwardIterator begin, ForwardIterator end )

            Deletes all the items in the range [beginend) using the C++ delete operator. The item type must be a pointer type (for example, QWidget *).

            Example:

             QList<Employee *> list; list.append(new Employee("Blackpool", "Stephen")); list.append(new Employee("Twist", "Oliver")); qDeleteAll(list.begin(), list.end()); list.clear();

            Notice that qDeleteAll() doesn't remove the items from the container; it merely calls delete on them. In the example above, we call clear() on the container to remove the items.

            This function can also be used to delete items stored in associative containers, such as QMap and QHash. Only the objects stored in each container will be deleted by this function; objects used as keys will not be deleted.

            See also forward iterators.

            void qDeleteAll ( const Container & c )

            This is an overloaded member function, provided for convenience.

            This is the same as qDeleteAll(c.begin(), c.end()).

             

            上面qDeleteAll 方法的說明,已經很清楚了,如果T為指針類型時,釋放內存須在clear方法前加上qDeleteAll 方法。

            国产亚洲精久久久久久无码AV| 性做久久久久久久久| 无码国内精品久久人妻蜜桃| 久久AV高潮AV无码AV| 99久久精品免费看国产| 久久综合久久综合亚洲| 无码人妻少妇久久中文字幕蜜桃| 91精品观看91久久久久久| 亚洲精品美女久久久久99小说| 久久久久高潮毛片免费全部播放| 中文字幕一区二区三区久久网站 | 99精品国产在热久久无毒不卡| 97久久精品无码一区二区天美| 欧美粉嫩小泬久久久久久久 | 偷窥少妇久久久久久久久| 久久99精品久久久久久hb无码| 国产精自产拍久久久久久蜜| 久久综合九色综合网站| 一本一道久久a久久精品综合| 久久综合久久综合久久| 久久精品亚洲精品国产色婷| 日韩十八禁一区二区久久| 精品熟女少妇aⅴ免费久久| 久久国产高清字幕中文| 成人久久久观看免费毛片| 久久青青草原亚洲av无码app| 亚洲国产精品狼友中文久久久| 久久久精品久久久久特色影视| 久久精品国产精品亚洲精品 | 国产精品一久久香蕉国产线看观看 | 久久久免费观成人影院| 国产三级精品久久| 精品无码久久久久久久久久| 91久久九九无码成人网站| 国产2021久久精品| 久久涩综合| 久久婷婷国产剧情内射白浆| 精品久久久久久无码不卡| 精品国产乱码久久久久久人妻| 久久婷婷五月综合国产尤物app| 久久国语露脸国产精品电影|