內(nèi)存管理一直是令C++程序員最頭疼的工作,C++繼承了C那高效而又靈活的指針,使用起來(lái)稍微不小心就會(huì)導(dǎo)致內(nèi)存泄漏(memory leak)、“野”指針(wild pointer)、訪問(wèn)越界(accessdenied)等問(wèn)題。曾幾何時(shí),C++程序員曾經(jīng)無(wú)限地向往Java、C#等語(yǔ)言的垃圾回收機(jī)制。雖然C++標(biāo)準(zhǔn)提供了智能指針std: :auto_ ptr, 但并沒(méi)有解決所有問(wèn)題。
閱讀完,你會(huì)了解到高效的內(nèi)存管理方法,徹底忘記“?!?Stack)、“堆”(Heap)等內(nèi)存分配相關(guān)的術(shù)語(yǔ),并且還會(huì)發(fā)現(xiàn),Boost 為C++提供的解決方案可能要比Java和C#等其他語(yǔ)言更好。
智能指針(smart pointer)是C++群體中熱門的議題,圍繞它有很多有價(jià)值的討論和結(jié)論。它實(shí)踐了推薦書目[1]中的代理模式,代理了原始“裸”指針的行為,為它添加了更多更有用的特性。
C++引入異常機(jī)制后,智能指針由-種技巧升級(jí)為一種非常重要的技術(shù),因?yàn)槿绻麤](méi)有智能指針,程序員必須保證new對(duì)象能在正確的時(shí)機(jī)delete,四處編寫異常捕獲代碼以釋放資源,而智能指針則可以在退出作用域時(shí)一不管是正常流程離開或是因異常離開一總調(diào)用delete來(lái)析構(gòu)在堆上動(dòng)態(tài)分配的對(duì)象。
存在很多種智能指針,其中最有名的應(yīng)該是C++98標(biāo)準(zhǔn)中的“自動(dòng)指針”std::auto_ ptr,它部分地解決了獲取資源自動(dòng)釋放的問(wèn)題,例如:
int main()
{
auto_ ptr< class_ need_ resource >p1 (new class_ need_ resource) ;
auto_ ptrp2 (factory.create()) ;
}//離開作用域,p1、p2自動(dòng)析構(gòu)從而釋放內(nèi)存等資源
三、智能指針utoptr的構(gòu)造函數(shù)接受new操作符或者對(duì)象工廠創(chuàng)建出的對(duì)象指針作為參數(shù),從而代理了原始指針。雖然它是- -一個(gè)對(duì)象,但因?yàn)橹剌d了operator*和 opreator->,其行為非常類似指針,可以把它用在大多數(shù)普通指針可用的地方。當(dāng)退出作用域時(shí)(離開函數(shù)main()或者發(fā)生異常),C++語(yǔ)言會(huì)保證auto_ ptr對(duì)象銷毀,調(diào)用auto_ ptr的析構(gòu)函數(shù),進(jìn)而使用delete操作符刪除原始指針釋放資源。
auto_ ptr很好用,被包含在C++標(biāo)準(zhǔn)庫(kù)中令它在世界范圍內(nèi)被廣泛使用,使智能指針的思想、用法深入人心。但標(biāo)準(zhǔn)庫(kù)并沒(méi)有覆蓋智能指針的全部領(lǐng)域,尤其是最重要的引用計(jì)數(shù)型智能指針。
boost.smart_ ptr 庫(kù)是對(duì)C++98標(biāo)準(zhǔn)的-一個(gè)絕佳補(bǔ)充。它提供了六種智能指針,包括scoped_ ptr、 scoped array shared ptr、shared array, weak_ ptr 和intrusive_ptr,從各個(gè)方面來(lái)增強(qiáng)std: :auto_ _ptr, 而且是異常安全的。庫(kù)中的兩個(gè)類一-shared ptr和weak_ ptr 已被收入到C++新標(biāo)準(zhǔn)的TR1庫(kù)中。
接下來(lái)的部分將詳細(xì)介紹scoped ptr、scoped_ array、shared ptr和sharedarray,簡(jiǎn)要介紹另兩個(gè)組件weak_ ptr和intrusive_ ptr。它們都是很輕量級(jí)的對(duì)象,速度與原始指針相差無(wú)幾,對(duì)于所指的類型T也僅有一個(gè)很小且很合理的要求:類型T的析構(gòu)函數(shù)不能拋出異常。
這些智能指針都位于名字空間boost,為了使用smart_ _ptr 組件,需要包含頭文件
#include
using namespace boost;
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享標(biāo)題:C++為什么會(huì)有智能指針-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://jinyejixie.com/article46/jgseg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、企業(yè)網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、自適應(yīng)網(wǎng)站、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容