青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  117 Posts :: 2 Stories :: 61 Comments :: 0 Trackbacks

常用鏈接

留言簿(8)

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

 

1、 問題闡述

      一個大型的C++程序中最容易出現,也是最頭疼的一個問題就是內存泄露,即忘記釋放已經申請的內存,造成程序占用的內存不斷上升,系統性能不斷下降,甚至造成內存耗盡而導致程序崩潰。在Java中提供自動垃圾回收機制,程序在何時的時機將回收內存,C++語言一直沒有將這種機制作為語言的內部機制,但是它也提供了足夠的靈活機制,使開發人員有效地避免內存泄露。

2、 內部封裝

      可以將分配和釋放的過程封裝到一個類中,即在構造的時候申請內存,析構的時候釋放內存,從而保證沒有內存泄露。下面是一個簡單的封裝類。

#include <iostream>
#include 
<cstring>
using namespace std;
class AutoNewDel
{
private:
    
char* m_szBuf;
    unsigned 
int m_nSize;
public:
    AutoNewDel(unsigned 
int n=1)
    
{
        m_szBuf
=new char[n];
        m_nSize
=n;
    }
;
    
~AutoNewDel()
    
{
        
if(m_szBuf!=NULL)    //提供安全機制
        {
            delete[] m_szBuf;    
//刪除字符數組
            m_szBuf=NULL;    //防止出現野指針
        }

    }
;
    
char* GetBuf()
    
{
        
return m_szBuf;
    }
;
}
;
void fun()
{
    AutoNewDel tmpObj(
100);
    
char* p= tmpObj.GetBuf();
    strcpy(p,
"one world, one dream");
    cout
<<p<<endl;
}

int main()
{
    fun();
    cout
<<"exit main"<<endl;
    
return 0;
}

      在這個例子中,封裝了char類型的內存分配和刪除,當聲明對象tmpObj時,即可獲得相應的內存,而且這個內存再tmpObj對象的作用域推出時自動釋放,不需要開發人員顯示的調用delete來釋放了,避免了由于忘記釋放內存而引起的內存泄露錯誤。
      本例給出了一個最基本的思路,但是還是存在很多問題的,比如復制構造函數和復制的問題。下面將演示這個例子的不足,修改函數fun(),增加一個賦值語句,如下:
void fun()
{
    AutoNewDel tmpObj(
100);
    AutoNewDel tmpObj2
=tmpObj;//這里是增加的語句
    char* p= tmpObj.GetBuf();
    strcpy(p,
"one world, one dream");
    cout
<<p<<endl;
}
      在這個類中并沒有實現復制構造函數,因此編譯器自動構造一個默認的復制構造函數,執行位復制操作,即將對象tmpObj的內容逐字地復制到對象tmpObj2中,兩個對象中的m_szBuf指向同一塊內存,當對象銷毀時,m_szBuf會被銷毀兩次,從而造成程序錯誤(本博客還有一篇隨筆說明相關的內容,隨筆地址為:C++ primer plus第十一章 使用類的程序。簡單的解決辦法就是禁止復制構造函數,在類中聲明復制構造函數為私有。但是這樣治標不治本,它限制類的功能實現。可以通過一個引用一個計數的方法,即避免了對同一塊內存的多次刪除,也允許復制構造函數。
      
      引用的計數的原理是這樣的,就是對要使用的內存維護一個計數器,記錄當前有多少指針指向這塊內存。當有指針指向這塊內存時,計數器加1;反之,當指向這塊內存指針銷毀時,計數器減1。當這塊內存的計數器為0時,才允許刪除這塊內存。可以在類的構造函數和析構函數中分別完成加1和減1的操作。代碼如下:
#include <iostream>
#include 
<cstring>
using namespace std;
class AutoNewDel
{
// Attribute
private:
    
char* m_szBuf;
    unsigned 
int m_nSize;
    
int * m_count;    //新增加的語句
public:
    AutoNewDel(unsigned 
int n=1)//在構造函數中申請內存
    {
        m_szBuf
=new char[n];
        m_nSize
=n;
        
//新增加的語句
        m_count=new int;
        
*m_count=1;
        cout
<<"count is : "<<*m_count<<endl;
    }
;
    
//新增加的復制構造函數
    AutoNewDel(const AutoNewDel & s)
    
{
        m_nSize
=s.m_nSize;
        m_szBuf
=s.m_szBuf;
        m_count
=s.m_count;
        (
*m_count)++;
        cout
<<"count is : "<<*m_count<<endl;
    }

    
~AutoNewDel()
    
{
        (
*m_count)--;
        cout
<<"count is : "<<*m_count<<endl;//新增加的兩條語句
        
        
if(*m_count==0)
        
{
            cout
<<"buf is deleted"<<endl;
            
if(m_szBuf!=NULL)    //提供安全機制
            {
                delete[] m_szBuf;    
//刪除字符數組
                m_szBuf=NULL;    //防止出現野指針
                if(m_count!=NULL)
                
{
                    delete m_count;
                    m_count
=NULL;
                }

            }

        }

    }
;
    
char* GetBuf()
    
{
        
return m_szBuf;
    }
;
}
;
void fun()
{
    AutoNewDel tmpObj(
100);
    
char* p= tmpObj.GetBuf();
    strcpy(p,
"one world, one dream");
    cout
<<p<<endl;

    AutoNewDel tmpObj2
=tmpObj;
    cout
<<"tmpObj2.m_szBuf = "<<tmpObj2.GetBuf()<<endl;
}

int main()
{
    fun();
    cout
<<"exit main"<<endl;
    
return 0;
}

程序輸出結果如下:


想要獲得更多內容,可點擊:《Visuanl C++代碼參考與技巧大全》學習筆記——索引隨筆
posted on 2010-02-15 14:41 煙皚 閱讀(3241) 評論(0)  編輯 收藏 引用 所屬分類: 《Visual C++代碼參考與技巧大全》學習筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲视频一二区| 最新日韩在线| 亚洲欧美精品在线观看| 久久夜色精品国产欧美乱极品| 亚洲激情综合| 在线观看视频一区二区| 在线观看三级视频欧美| 欧美福利视频在线观看| 欧美片第一页| 亚洲欧美在线视频观看| 久久亚洲风情| 欧美涩涩网站| 亚洲免费观看在线观看| 久久精品国产第一区二区三区最新章节| 欧美激情一区二区三区在线| 欧美一级淫片aaaaaaa视频| 欧美日韩国产bt| 亚洲国产欧美一区二区三区丁香婷| 久久久.com| 午夜在线观看免费一区| 国产精品久久网| 亚洲摸下面视频| 中文高清一区| 国产精品美女久久久久久久| 亚洲午夜久久久久久久久电影院 | 欧美一区亚洲二区| 一区二区三区精密机械公司| 欧美午夜电影完整版| 亚洲免费在线视频| 亚洲愉拍自拍另类高清精品| 国产亚洲精品aa| 老鸭窝91久久精品色噜噜导演| 久久久久久色| 日韩视频在线免费| 一本色道**综合亚洲精品蜜桃冫| 欧美三级中文字幕在线观看| 亚洲免费在线看| 久久精品国产亚洲a| 亚洲国产精品999| 亚洲人成在线观看一区二区 | 久久国产夜色精品鲁鲁99| 亚洲午夜久久久久久尤物 | 久热精品在线视频| 蜜桃av久久久亚洲精品| 一区二区三区导航| 西瓜成人精品人成网站| 在线欧美福利| 国产精品99久久久久久久久| 黄色精品网站| 99精品国产福利在线观看免费| 国产精品女主播| 久久综合九色综合欧美狠狠| 欧美jizzhd精品欧美巨大免费| 欧美成人视屏| 欧美一区二区三区男人的天堂| 久久久久久久久蜜桃| 亚洲精品资源美女情侣酒店| 亚洲天堂偷拍| 亚洲激情校园春色| 午夜欧美电影在线观看| 亚洲理论在线| 亚洲制服少妇| 亚洲精品欧美精品| 久久国产欧美日韩精品| 在线视频欧美一区| 久久久久久一区二区三区| 亚洲小视频在线| 欧美成人按摩| 久久夜色精品国产欧美乱| 国产精品av免费在线观看| 欧美/亚洲一区| 国产麻豆午夜三级精品| 91久久在线播放| 激情一区二区三区| 亚洲一区二区免费看| 日韩午夜激情av| 久久国产主播| 中文在线一区| 欧美激情a∨在线视频播放| 久久婷婷国产综合国色天香| 国产精品女主播| 一本色道久久综合亚洲精品高清| 极品少妇一区二区| 欧美伊人影院| 久久精品30| 欧美日韩一区成人| 亚洲高清久久久| 亚洲东热激情| 久久久亚洲国产美女国产盗摄| 久久精品一区二区三区不卡牛牛| 国产精品丝袜久久久久久app| 日韩亚洲视频在线| 一区二区三区 在线观看视频| 欧美jizzhd精品欧美巨大免费| 久久综合图片| 国模大胆一区二区三区| 欧美中文字幕视频| 久久国产日韩欧美| 国产日韩欧美一区二区三区四区 | 久久一二三国产| 老牛国产精品一区的观看方式| 国产午夜精品视频免费不卡69堂| 午夜精品亚洲| 看欧美日韩国产| 亚洲二区在线视频| 欧美成人亚洲成人| 亚洲精品一区二区三区四区高清| 一本久久a久久免费精品不卡| 欧美日韩亚洲一区二区| 中文在线不卡| 欧美有码在线观看视频| 国产一区二区三区四区三区四| 久久激情视频| 亚洲大片在线| 亚洲午夜羞羞片| 国产伦精品一区二区三区照片91| 羞羞漫画18久久大片| 久久成人精品电影| 欧美成人免费在线视频| av成人天堂| 午夜国产欧美理论在线播放| 国产欧美精品一区二区三区介绍| 亚洲精选久久| 亚洲素人在线| 国产精品久久久久免费a∨ | 欧美亚洲免费在线| 美女视频一区免费观看| 最新高清无码专区| 欧美肉体xxxx裸体137大胆| 午夜精品久久久久久99热软件| 模特精品在线| 亚洲一区二区三区777| 国模精品一区二区三区色天香| 欧美成人官网二区| 亚洲一区二区视频在线| 欧美成人精品在线| 亚洲欧美日韩国产精品| 狠狠色伊人亚洲综合成人| 欧美区视频在线观看| 欧美一区二区在线播放| 亚洲精品免费在线| 久久国产一区| 亚洲视频一区在线| 136国产福利精品导航| 国产精品久久久爽爽爽麻豆色哟哟| 久久精品国产一区二区电影| 日韩一级在线| 欧美国产高潮xxxx1819| 欧美一区二区三区四区在线| 亚洲人精品午夜在线观看| 国产午夜精品全部视频播放| 欧美日韩裸体免费视频| 久久亚洲精选| 亚洲欧美日韩视频二区| 亚洲日本成人| 欧美xart系列在线观看| 欧美一区二区在线看| 99在线精品观看| 亚洲国产精品久久久久秋霞不卡| 国产精品视频久久一区| 欧美日韩国产成人在线观看| 毛片一区二区三区| 久久精品国产亚洲高清剧情介绍| 亚洲一区视频在线| 亚洲视频免费在线观看| 亚洲精品一区二区三区av| 亚洲高清在线精品| 免费永久网站黄欧美| 看片网站欧美日韩| 久久久久一区二区| 午夜欧美精品久久久久久久| 亚洲少妇在线| 国产精品毛片| 欧美啪啪成人vr| 欧美精选在线| 欧美成人黄色小视频| 久久久人人人| 久久综合九色综合欧美狠狠| 久久久www成人免费毛片麻豆| 欧美一区观看| 欧美在线观看你懂的| 欧美一区激情| 久久精品官网| 免费久久99精品国产自| 老色鬼精品视频在线观看播放| 久久免费观看视频| 久久综合狠狠综合久久激情| 麻豆成人精品| 欧美国产视频日韩| 欧美精品粉嫩高潮一区二区| 欧美精品一区二区三区在线看午夜 | 99re国产精品| 一区二区三区高清视频在线观看 | 国产精品福利在线观看网址| 国产精品www.| 国产亚洲日本欧美韩国| 雨宫琴音一区二区在线| 亚洲国产精品国自产拍av秋霞| 亚洲精品国产精品久久清纯直播| 日韩视频一区二区三区在线播放|