• <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>

            road420

            導航

            <2006年10月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            統計

            常用鏈接

            留言簿(2)

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            對象的動態分配

            1 、對象的分類

            ??????? 全局對象( Global Object )?????????????????????Controlled by System

            ??????? 局部對象( Local Object )????????????????????? Controlled by System

            ??????? 動態生成對象( Dynamically Allocated Object ?? ?? ? ??controlled by programmer

            ?

            2 、動態對象的生與死

            ??????? 創建: new

            ??????? 銷毀: delete

            ?

            3 、動態對象的創建的地址

            ???????? 內存池( memory pool )中的一塊程序自由存儲區域( free store area ),實際上就是通常所說的堆( Heap

            ?

            4 、動態對象的存在形式

            ??????? 簡單對象( single object

            ??????? 對象數組( array object

            ??????? The placement new express

            ?

            5 、動態對象的使用

            ??????? 動態對象的操縱

            動態對象沒有名稱,而是返回分配對象的指針地址,所有操作都是通過指針間接完成

            ??????? 動態對象的初始化

            動態對象分配的內存區域是沒有初始化過的,里面存在的是隨機數據

            ?

            6 、動態對象及指針的生命周期

            ??????? 動態對象

            持續時間為 new ? è delete

            ??????? 指針

            根據其自身類型決定(全局 / 局部)

            ?

            7 、 delete 的使用

            1

            ???????? int ?*pi=new int;

            ???????? if(pi!=0){

            ???????? ? delete pi;

            }??????

            該段程序運行起來是沒有問題的,但是卻存在畫蛇添足的一筆: if(pi!=0)

            ???????? 原因是, delete 會自動完成這個測試,如果顯式地測試,將會多執行一次測試。所以說完全沒有必要。

            ????????

            ???????? 2

            ?????????????????? pointer=0;??????????????????? // 不指向任何對象

            ?????????????????? delete pointer;????????????? // 沒有必要

            ????????

            ???????? 總結:

            也許會有人覺得兩個例子似乎有點矛盾,其實上述例程的意思是:

            ??????? 當我們不知道一個對象內存是否已經釋放的時候,直接 delete 即可,是沒有任何問題的;額外的判斷完全沒有必要,反而會增加系統的工作量。

            ??????? 當我們明確地知道對象指針 ==NULL 時,表明已經釋了對象。這時就可以少寫一行代碼了。當然如果有人想看看計算機又沒有不良反應,另當別論。

            同時也證明了①,刪除一個 NULL 對象是沒有任何問題的

            ?

            8 、動態內存分配常見錯誤

            ??????? 內存泄露

            我想這個問題對 C++ 程序員來說,是非常熟悉的。

            u??????? 根源是:?

            簡短的回答: new delete 沒有配對使用

            明白了嗎?還不明白? next

            ???????? ???????? 只給對象分配了內存,但是直到關閉程序的時候,都還沒有向對象要回那塊內存。

            u??????? 怎樣發現?

            ????????? Vc IDE 中, debug 狀態,程序結束時 output 窗口的 Detect Memory leak !

            ????????? 使用工具軟件,如: BoundCheck

            ?

            u??????? 如何避免?

            呵呵,知道了根源就應該知道該咋辦了。。。

            ????????

            ??????? / 寫已經刪除的對象(內存)

            當對象 delete 以后,對象內存被系統回收,其指針就指向到一塊非法的內存。如果再對該對象指向內存操作就會導致不可預知的錯誤。因此,通常的做法是 delete 之后,立即賦 NULL

            ?

            ??????? 內存 corruptted

            很熟悉,是吧?不要著急,請聽我慢慢道來。。。

            ???????? 未命名.bmp

            根源:

            u??????? ptrA ptrB 都指向同一塊內存

            u??????? 通過 ptrA 釋放內存 Mem0 Mem0 分配給其它對象 ptrC

            u??????? ptrB 釋放內存 , Mem0 存儲的 ptrC 指向的新對象就被破壞掉了。

            u??????? 再次對 ptrC 操作就會出錯

            ?

            ??????? 對象類型錯誤

            例:

            CDialog ?dlg=new CDialog ;

            delete dlg ;

            ???????? ???????? 你能發現什么不對嗎?

            ?????????????????? 提示一下, debug 運行會發現 mem leak !

            ?????????????????? 知道了吧, what

            ???????? ???????? 就是 delete dlg 。 ??????????????????

            5.1 中說過, new 返回的是指針。所以應該將 dlg 聲明為 CDialog* 類型。

            posted on 2006-10-23 19:54 深邃者 閱讀(366) 評論(0)  編輯 收藏 引用

            国产精品久久99| 亚洲国产精品狼友中文久久久| 国产综合免费精品久久久| 日韩精品久久久久久免费| 伊人久久精品无码av一区| 亚洲精品tv久久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 久久亚洲精品无码观看不卡| 久久精品一区二区三区不卡| 国产美女久久久| 久久99精品久久久久久野外| 国产呻吟久久久久久久92| 欧美粉嫩小泬久久久久久久| 性欧美大战久久久久久久| 区久久AAA片69亚洲| 亚洲午夜无码久久久久| 国内精品人妻无码久久久影院| 国产亚洲欧美成人久久片| 国产—久久香蕉国产线看观看| 亚洲精品久久久www| 久久久精品国产sm调教网站| 好属妞这里只有精品久久| 精品久久久久久无码中文野结衣| 欧美国产成人久久精品| 欧美大香线蕉线伊人久久| 精品久久久久久久久久久久久久久| 人妻无码久久精品| 日韩精品久久久久久免费| 久久久久无码精品国产app| 97久久婷婷五月综合色d啪蜜芽| 久久国产乱子伦免费精品| 久久国产成人| 久久久久免费看成人影片| 久久久久九国产精品| 久久精品国产第一区二区三区 | 国产精品18久久久久久vr| 久久99精品久久久久久9蜜桃| 亚洲第一极品精品无码久久| 色婷婷狠狠久久综合五月| 九九久久自然熟的香蕉图片| 久久午夜夜伦鲁鲁片免费无码影视|