• <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 - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            初學(xué)QT。我本人認為QT更是一種藝術(shù)的體現(xiàn),而非簡單的當作一個物品開看待。體現(xiàn)了人類思想的偉大。就這點而言,中國人恰恰就缺少這種創(chuàng)建型藝術(shù)細胞。或者說是,國內(nèi)缺少這種藝術(shù)創(chuàng)建的氛圍。

               以下文章均為閑聊。并無技術(shù)的嚴謹性。關(guān)于其中的內(nèi)容,可能存在錯誤。請指正。

              

               C++, Pascal,語言要求必須明確內(nèi)存的作用域,并且對創(chuàng)建的內(nèi)存區(qū)域。由程序員刪除delete。雖然存在自動模式,但并不先進

               Java, SmallTalk,語言則可進行內(nèi)存碎片的自動查找分析,動態(tài)的刪除無用內(nèi)存區(qū)域。從而可以使程序員專注于程序邏輯的開發(fā)。而無須在即系統(tǒng)問題。

               對于內(nèi)存的釋放存在3中方法:

                   1 - Let the creating object delete its child objects. 創(chuàng)建并刪除

                   2 - Let the last object to handle an object delete it.最后處理

                   3 - Don't care about memory and forget about it.      無須在意

               對于第三種方法,我們稱之為"bug"。將會造成內(nèi)存的溢出。 對于程序員應(yīng)該熟悉前2種方法。

               但QT則采用一種更高級的內(nèi)存管理機制.

               1 - QPointer  可以監(jiān)控空間的分配狀況。以下程序,請自行分析

                     QDate *mydate=new QDate(QDate::currentDate());
                     QPointer<QDate> mypointer=mydata;
                     mydate->year();    // -> 2005
                     mypointer->year(); // -> 2005

                    delete mydate;

                    if(mydate==0) printf("clean pointer");                       //mode 1
                    else printf("dangling pointer");
                    // -> "dangling pointer"

                    if(mypointer.isNull()) printf("clean pointer");             //mode 2
                    else printf("dangling pointer");
                    // -> clean pointer

               2 - 內(nèi)存處理機制   QObjectCleanupHandler

                  姑且略過

               3 - 碎片處理

                   存在幾種簡單的碎片處理機制。

                   a.計數(shù)器模式類似于壓棧

                   b.父窗口的自動回收

                   c.自我的回收

            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

            下面才是最重要的(轉(zhuǎn)載)

             在棧上用new分配的內(nèi)存,為什么沒有用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出來的一個指針變量,也就是在棧上申請的內(nèi)存,在C++語言里,明確過,在棧上分配的內(nèi)存是必須認為的用delete釋放的,防止內(nèi)存泄露。這里為什么沒有呢。后來看到有的QT程序也有明確使用delete釋放內(nèi)存的。這里越發(fā)不解了。后來,查到原來是QT擴展了C++,如果指針對象有父對象時,可以不用顯式釋放內(nèi)存。我們需要顯式釋放的是那些沒有父對象的孤立的指針。但上面這個例子并沒有繼承父對象,注意第二個指針,指向父對象的指針參數(shù)為0,即沒有父對象,但是setMainWidget把它設(shè)為了主窗口部件,它就和程序同步了,當程序退出的時候自動釋放,孩子對象的釋放也是如此,在QT中擴展了C++ ,如果父親對象無效時,子對象自動釋放分配的內(nèi)存。


            久久久久亚洲国产| 1000部精品久久久久久久久| 亚洲综合精品香蕉久久网97 | 国色天香久久久久久久小说| 精品久久久久久中文字幕人妻最新 | 九九精品99久久久香蕉| 99久久www免费人成精品| 日本加勒比久久精品| 久久久久久a亚洲欧洲aⅴ| 久久水蜜桃亚洲av无码精品麻豆| 亚洲午夜久久久| 综合久久给合久久狠狠狠97色 | 亚洲第一永久AV网站久久精品男人的天堂AV| 日韩欧美亚洲综合久久影院Ds | 国产 亚洲 欧美 另类 久久| AV狠狠色丁香婷婷综合久久| 久久久久亚洲精品中文字幕| 久久久久成人精品无码 | 国产AⅤ精品一区二区三区久久| 亚洲天堂久久久| 久久人人爽人人爽AV片| 久久国产乱子精品免费女| 日本精品久久久久中文字幕8| 久久成人国产精品免费软件| 久久精品国产精品亚洲精品| 国产成人久久久精品二区三区| 日本久久久久亚洲中字幕| 久久综合鬼色88久久精品综合自在自线噜噜| 久久青草国产精品一区| 99精品国产在热久久| 久久精品国产亚洲av影院| 久久免费视频网站| 国产成人精品免费久久久久| 国产综合久久久久久鬼色| 亚洲中文字幕无码久久2017| 亚洲αv久久久噜噜噜噜噜| 久久精品国产福利国产秒| A狠狠久久蜜臀婷色中文网| 狠狠色噜噜狠狠狠狠狠色综合久久| 精品久久8x国产免费观看| 久久精品99久久香蕉国产色戒 |