freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c改善程序設(shè)計(jì)技術(shù)的50個(gè)有效做法-在線瀏覽

2025-02-28 04:16本頁(yè)面
  

【正文】 ator new時(shí),你的new函數(shù)的行為應(yīng)該與系統(tǒng)原有的 new函數(shù)的行為保持一致。如果內(nèi)存不足,拋出一個(gè) bad_alloc類型的異常。 //new 函數(shù)的偽碼 void * operator new(size_t size) { if(size==0){size=1。 if(the allocation was successful) return (a pointer to the memory)。 //重新設(shè)定為原本的函數(shù) if(globalHandler) (*globalHandler)( ) else throw std::bad_alloc( )。 operator new 可以被繼承 , 但要小心 ,否則會(huì)導(dǎo)致問(wèn)題 class Base { public: static void*oprator new(size_t size)。 //調(diào)用 Base類中的 operator new出錯(cuò) 這里導(dǎo)出類內(nèi)存比基類要大。 //回到標(biāo)準(zhǔn) operator new函數(shù) …… } 重寫(xiě) operator delete void operator delete(void*rawMemory) { if(rawMemory == 0)return。 return。 static void operator delete(void* rawMemory,size_t size)。 { if(rawMemory ==0)return。 //用標(biāo)準(zhǔn)版 delete處理 return。 return。 static void* operator new(size_t size, new_handler p)。 } }。 //調(diào)用 X:: operator new(size_t size, new_handler p)。 //調(diào)用 X:: operator new(size_t size)。 class AirplaneRep {……}。 //唯一數(shù)據(jù)成員是指針 }。 //要求內(nèi)存不大 分配的內(nèi)存比實(shí)際所需要的內(nèi)存要大, 這是為了 delete 這塊內(nèi)存時(shí),系統(tǒng)能知道其大小。 定制內(nèi)存管理。 static void operator delete(void*deadObject, size_t size)。 Airplane *next。//兩個(gè)指針公用一個(gè)內(nèi)存 static const int BLOCK_SIZE。 //用鏈表配置一片內(nèi)存,整個(gè)類只須一個(gè)鏈 }。 { if(size != sizeof(Airplane)) return ::operator new(size)。 //p指向鏈表頭 if(p) headOfFreeList = pnext。 for(int i=1。++i) //保留第一塊 newBlock[i].next = amp。 newBlock[BLOCK_SIZE1].next = 0。 // p可用 headOfFreeList =amp。 } return p。這時(shí) ::operator new會(huì)調(diào)用 new_handler直 到拋出異常,因此我們不需要再寫(xiě)一次new_handler處理 具體實(shí)現(xiàn)文件中要先對(duì)靜態(tài)成員初始化 , Airplane * Airplane::headOfFreeList。 這個(gè)版本的 operator new 可以運(yùn)作良好,速度快過(guò)兩個(gè)數(shù)量級(jí)。 if(size !=sizeof(Airplane)){ ::operator delete(deadObject)。 } Airplane *carcass = static_castAirplane(deadObject)。 HeadOfFreeList = carcass。 如果用 member版本不要忘記定義 virtual 析構(gòu)函數(shù)。 這是因?yàn)橛昧?memory pool 一次分配一塊內(nèi)存,逐步使用逐步釋放, 不必再專門(mén)釋放 memory pool. 定義一個(gè) memory pool 類,使每一個(gè) pool對(duì)象都是一個(gè)內(nèi)存配置器。 void* alloc( size_t n)。//將 p的內(nèi)存送回 //pool遵循 operator delete的規(guī)矩 ~pool( )。 用 Pool 對(duì)象來(lái)配置內(nèi)存,當(dāng)被銷毀時(shí),配置的內(nèi)存自動(dòng)被釋放。 class Airplane { public: static void* operator new( size_t size)。 …… private: AirplaneRep *rep。 //Airplane的 memory pool }。 } inline void Airline::operator delete(void* p, size_t size) {(p, size)。 構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值運(yùn)算符 構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值運(yùn)算用來(lái)產(chǎn)生一個(gè)新對(duì)象并初始化,撤銷一個(gè)對(duì)象并收回占有的內(nèi)存,為已有的對(duì)象賦一個(gè)新值。 11. class內(nèi)有成員指針并動(dòng)態(tài)配置內(nèi)存時(shí),一定要有拷貝構(gòu)造函數(shù),賦值運(yùn)算符重載 class String { public: String(const char*value)。 …… //沒(méi)有拷貝構(gòu)造函數(shù), //也沒(méi)有賦值運(yùn)算符重載 private: char*data。 String::String(const char *value) { if(value) { data = new char[strlen(value)+1]。 } else { data = new char[1]。 } } inline String::~String( ){delete[ ] data。 String b(“World” )。 Hello World a b data data 由于沒(méi)有自定義的賦值函數(shù),只能用 C++產(chǎn)生的默認(rèn)賦值函數(shù), 它簡(jiǎn)單地將 b的成員指針 data指向 ,引起 字符串“ World”占有的內(nèi)存遺失。 拷貝構(gòu)造函數(shù)用來(lái)傳值, void donothing(String la){ } String s= “the truth is out of there”。 當(dāng)函數(shù) donothing完成任務(wù)后,參數(shù) s所含的指針被析構(gòu), la被刪除。 解決的辦法就是自己定義拷貝構(gòu)造函數(shù),賦值函數(shù)重載。 一旦出錯(cuò),編譯器會(huì)給出錯(cuò)誤提示。 即便沒(méi)有 const成員數(shù)據(jù)和 reference引用數(shù)據(jù),初始化也比賦值效率高。 2. 調(diào)用構(gòu)造函數(shù)。 初始化也容易維護(hù),修改。 class ManyDataMbs { public: ManyDataMbs() ManyDataMbs( const ManyDataMbsamp。 private: int a, b, c, d, e, f, g, h。 void init ( )。 void ManyDataMbs::init( ) { a=b=c=d=e=f=g=h=1。 } ManyDataMbs::ManyDataMbs( ) { init( )。 x) { init( )。 靜態(tài)數(shù)據(jù)成員只能初始化一次,不能初始化多次。 …… private: vectorT data。 //數(shù)組中元素的個(gè)數(shù) int lBound, hBound。 基類成員總是比導(dǎo)出類先初始化。 14. 總是讓基類擁有虛析構(gòu)函數(shù) 一個(gè)軍事應(yīng)用軟件 class EnemyTarget { public: EnemyTarget( ){++ numTargets。) {++ numTargets。} static size_t numberOfTargets( ) {return numTargets。 //摧毀敵方目標(biāo)是否成功 private: static size_t numTargets。 //靜態(tài)成員初始化為 0,放在類外 class EnemyTank : public EnemyTarget { public: EnemyTank ( ){++ numTanks。){++ numTanks。} static size_t numberOfTanks( ){return numTanks。 //摧毀敵方坦克是否成功 private: static size_t numTanks。 …… delete targetPtr。 幾乎所有的基類都有虛函數(shù),只要有一個(gè)虛函數(shù),就要把析構(gòu)函數(shù)定義為虛函數(shù)。 但虛函數(shù)會(huì)增加內(nèi)存開(kāi)銷。 聲明一個(gè)抽象類,可以加一個(gè)純虛析構(gòu)函數(shù)。 C::operator=(const Camp。 char x, y, z。 x,operator=(=(= ?a?))。他們應(yīng)該有相同的類型。 String::operator=(const Stringamp。 //返回一個(gè)引用指向左側(cè)對(duì)象 } Strinamp。 rhs) { …… return rhs。 String::operator=( Stringamp。 //無(wú)法編譯 rhs應(yīng)該是一個(gè)變量。 16. 在 operator=中為所有的數(shù)據(jù)成員賦值 基類中這不成問(wèn)題,在派生類中要小心。 Derived::operator=(const Drivedamp。rhs) return *this。 //調(diào)用基類的賦值運(yùn)算 data = 。 } Derivedamp。 rhs) { if(this = = amp。 static_castBaseamp。 //*this強(qiáng)制轉(zhuǎn)換成基類的引用賦值基類成員 data = 。 } 拷貝構(gòu)造函數(shù)中要調(diào)用基類構(gòu)造函數(shù)。 X a。b = a。 //自己賦值給自己 合法 在賦值函數(shù)中要特別謹(jǐn)慎的處理自己的別名賦值給自己的問(wèn)題。導(dǎo)出類的賦值運(yùn)算重載中一定要先檢查,可以節(jié)省許多工作 確保正確性 賦值運(yùn)算通常要先將左邊對(duì)象的資源釋放,再行賦值。 如何判斷兩個(gè)對(duì)象是同一個(gè)對(duì)象? 不是對(duì)象的內(nèi)容相同,而是看他們的地址是否相同。 X::operator=(const Xamp。rhs) return *this。這時(shí)我們就要當(dāng)心,不要誤刪了有用的資源。 對(duì)象的初始化和賦值有什么不同? 決定構(gòu)造函數(shù)和賦值函數(shù)的設(shè)計(jì)。 允許那種類型轉(zhuǎn)換 構(gòu)造函數(shù)可以用作隱式類型轉(zhuǎn)換,顯式類型轉(zhuǎn)換要自定義。 哪些運(yùn)算和函數(shù)必須禁用 放到 private成員中。 是否通用類型 確定是否要用類模板 18.努力讓接口完滿( plete)且最小化 客戶端接口 ( client interface)指公有成員,一般只有公有函數(shù),不要有公有數(shù)據(jù)。 最小化接口 盡量讓函數(shù)個(gè)數(shù)最少。太多函數(shù)不容易被理解,不易維護(hù),浪費(fèi)資源。 Tamp。 //傳回?cái)?shù)組的一個(gè)元素,可讀,可寫(xiě) const Tamp。 //傳回?cái)?shù)組的一個(gè)元素,可讀,不可寫(xiě) 19.區(qū)分成員函數(shù)、非成員函數(shù) 和友元函數(shù) 成員函數(shù)可以動(dòng)態(tài)綁定,可以用 virtual 非成員函數(shù)不能用 virtual, 非成員函數(shù)能不做友元盡量不做友元函數(shù)。 不要讓 operaor和 operator成為類的成員函數(shù) , 必要時(shí)作友元。 例子 class plex {…… plex operator*(plex rhs)const。 }。 a=a*b。//可以 a=2*a。 lhs, const plexamp。 20.避免將數(shù)據(jù)成員設(shè)置為公有數(shù)據(jù)
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1