• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            QList內(nèi)存釋放 (收集轉(zhuǎn)載及編輯)

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

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

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

            #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(); 注釋掉,內(nèi)存顯示為如下(任務(wù)管理器里的截圖)

            111

            如不去掉的話,內(nèi)存顯示如下圖

            22222

            2.T的類型為指針的情況,這時(shí)候直接調(diào)用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();}

             

            上面代碼運(yùn)行后的內(nèi)存情況如下圖

            3333

            說(shuō)明當(dāng)T的類型為指針時(shí),調(diào)用clear()方法并不能釋放其內(nèi)存

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

            再次運(yùn)行程序,此時(shí)的內(nèi)存情況如下圖

            4444

            通過(guò)對(duì)比靚圖,可以看出,內(nèi)存已經(jīng)釋放,我們?cè)賮?lái)看下qt助手中qDeleteAll 方法的說(shuō)明

            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 方法的說(shuō)明,已經(jīng)很清楚了,如果T為指針類型時(shí),釋放內(nèi)存須在clear方法前加上qDeleteAll 方法。

            狠狠色婷婷久久一区二区| 性高湖久久久久久久久| 精品国产婷婷久久久| 久久久久国产一区二区| 亚洲日韩欧美一区久久久久我| 亚洲中文字幕无码一久久区| 久久大香香蕉国产| 久久久久久噜噜精品免费直播| 久久久久亚洲AV成人网人人网站| 色综合久久中文字幕无码| 欧美亚洲国产精品久久蜜芽| 国产精品亚洲综合久久 | 精品久久久久久成人AV| 99久久精品费精品国产| 午夜精品久久久久| 蜜桃麻豆www久久| 亚洲色大成网站WWW久久九九| 精品久久久久久无码免费| 97久久国产露脸精品国产| 91精品国产91久久| 色欲久久久天天天综合网精品| 久久福利片| 久久精品国产亚洲综合色| 亚洲精品乱码久久久久久中文字幕 | 四虎久久影院| 国产精品99久久久久久董美香 | 久久综合给合久久狠狠狠97色69 | 无码精品久久久天天影视 | 色偷偷偷久久伊人大杳蕉| 久久一区二区三区免费| 99久久婷婷国产综合精品草原| 久久无码人妻一区二区三区午夜| 久久久WWW免费人成精品| 久久国产精品-久久精品| 久久精品国产亚洲av日韩| 亚洲综合伊人久久大杳蕉| 中文字幕久久亚洲一区| 日本精品久久久久久久久免费| 久久久精品视频免费观看 | 精品国产乱码久久久久久人妻 | 狠狠色综合网站久久久久久久高清|