本篇內(nèi)容主要講解“C++標(biāo)準(zhǔn)庫難點(diǎn)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C++標(biāo)準(zhǔn)庫難點(diǎn)有哪些”吧!
成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、臨清網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為臨清等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在C++標(biāo)準(zhǔn)庫中,有關(guān)缺省變量值的限制非常模糊。基于此,很多編譯器允許開發(fā)人員將缺省變量值包含在函數(shù)聲明,指向函數(shù)的指針和引用,成員函數(shù)的指針,以及typedef聲明中。
例外一種需要更好的內(nèi)存控制的情況是:需要在有限資源的情況下長時(shí)間不間斷運(yùn)行的程序。實(shí)時(shí)系統(tǒng)經(jīng)常需要用最少的耗費(fèi)來獲取有保證的可預(yù)期的內(nèi)存。這也就導(dǎo)致了更好的內(nèi)存控制的需要。
一般來說,這些程序都避免使用動(dòng)態(tài)的內(nèi)存分配,而使用特殊目的的內(nèi)存分配器來管理有限資源。此外,還有一些情況下由于硬件或系統(tǒng)的要求,需要將對(duì)象放在指定的內(nèi)存位置。這也需要進(jìn)行定制的內(nèi)存管理(通過重載new來加以實(shí)現(xiàn))。
當(dāng)分配內(nèi)建(built-in)類型的對(duì)象、未包含用戶自定義的new操作符函數(shù)的類對(duì)象、任何類型的數(shù)組時(shí),使用全局new操作符函數(shù)。當(dāng)在類中自定義C++標(biāo)準(zhǔn)庫,分配該類對(duì)象的內(nèi)存時(shí),調(diào)用該類的new操作符。如下:
#include #include class Blanks { public: Blanks(){} void *operator new( size_t stAllocateBlock, char chInit ); }; void *Blanks::operator new( size_t stAllocateBlock, char chInit ) { void *pvTemp = malloc( stAllocateBlock ); if( pvTemp != 0 ) memset( pvTemp, chInit, stAllocateBlock ); return pvTemp; } int main() { Blanks *a5 = new( 0xa5 ) Blanks;//創(chuàng)建對(duì)象Blanks,并且初試化為0xa5 return a5 != 0; }
new操作符可以重載,而delete卻不行。因?yàn)榈鹊叫枰尫诺臅r(shí)候,我們所能得到的就是一個(gè)指針。而且該指針可能不是原先的對(duì)象類型指針(有可能進(jìn)行了類型轉(zhuǎn)換)。實(shí)際上,當(dāng)使用new獲得一個(gè)指向一片內(nèi)存的指針時(shí),在該片內(nèi)存前有一個(gè)指示器(indicator),記錄實(shí)際分配的內(nèi)存數(shù)量。當(dāng)調(diào)用delete時(shí),可以獲知需要釋放的內(nèi)存大小。數(shù)組的釋放(Deallocating Arrays):
void f( ) { X* p1 = new X[10]; //... delete [] X; }
為什么不使用delete [10] X;來釋放內(nèi)存?Bjarne Stroustrup稱這種做法容易導(dǎo)致錯(cuò)誤,而將記錄元素個(gè)數(shù)的任務(wù)放在delete的實(shí)現(xiàn)中了。
此外,C++標(biāo)準(zhǔn)庫中提供了一種智能型指針auto_ptr,這種指針可以幫助我們防止“被異常拋出時(shí)發(fā)生資源泄漏”。但是缺點(diǎn)是該智能型指針不能指向數(shù)組,因?yàn)槠鋬?nèi)部釋放內(nèi)存是通過delete而非delete [] 來進(jìn)行的。
所以,只能使用其來指向一個(gè)單個(gè)對(duì)象。模板部分是C++中比較難的部分,也是C++的魅力所在。
到此,相信大家對(duì)“C++標(biāo)準(zhǔn)庫難點(diǎn)有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!