讓自己習(xí)慣C++
1经柴、視C++為一個(gè)語言聯(lián)邦
2、盡量以const墩朦、enum坯认、inline替換#define
3、盡可能的使用const
4氓涣、確定對象在使用前被初始化
構(gòu)造/析構(gòu)/賦值運(yùn)算? ?
5牛哺、了解C++默認(rèn)編寫并調(diào)用哪些函數(shù)
6、若不想使用編譯器自動生成的函數(shù)就該明確拒絕
7劳吠、為多態(tài)基類生成virtual析構(gòu)函數(shù)
8引润、別讓異常逃離析構(gòu)函數(shù)
9、絕不在構(gòu)造和析構(gòu)過程中調(diào)用virtual函數(shù)
10痒玩、令operator=返回一個(gè)reference to *this
11淳附、在operator=中處理“自我賦值”
12议慰、復(fù)制對象時(shí)勿忘其每一個(gè)成分
資源管理? ?
13、以對象管理資源
14奴曙、在資源管理類中小心coping行為
15别凹、在資源管理類中提供對原始資源的訪問
16、成對使用new和delete時(shí)要采取相同形式
17缆毁、以獨(dú)立語句將newed對象置入智能指針
設(shè)計(jì)與聲明? ?
18番川、讓接口容易被正確使用,不易被誤用
19脊框、設(shè)計(jì)class猶如設(shè)計(jì)type
20颁督、寧以pass-by-reference-to-const代替pass-by-value
? ? 21、必須返回對象時(shí)浇雹,別妄想返回reference
? ? 22沉御、將成員變量聲明為private
? ? 23、寧以non-member昭灵、non-friend代替member函數(shù)
? ? 24吠裆、若所有參數(shù)皆需類型轉(zhuǎn)換,請為此采用non-member函數(shù)
? ? 25烂完、考慮寫一個(gè)不拋異常的swap函數(shù)
實(shí)現(xiàn)? ?
? ? 26试疙、盡可能延后變量定義式的出現(xiàn)時(shí)間
? ? 27、盡量少做轉(zhuǎn)型動作
? ? 28抠蚣、避免返回handles指向?qū)ο髢?nèi)部成分
? ? 29祝旷、為“異常安全”而努力是值得的
? ? 30、透徹了解inlining的里里外外
? ? 31嘶窄、將文件間的編譯依存關(guān)系降至最低
繼承與面向?qū)ο笤O(shè)計(jì)? ?
? ? 32怀跛、確定你的public繼承塑模出is-a關(guān)系
? ? 33、避免遮掩繼承而來的名稱
? ? 34柄冲、區(qū)分接口繼承和實(shí)現(xiàn)繼承
? ? 35吻谋、考慮virtual函數(shù)以外的其他選擇
? ? 36、絕不重新定義繼承而來的non-virtual函數(shù)
? ? 37现横、絕不重新定義繼承而來的缺省參數(shù)值
? ? 38漓拾、通過復(fù)合塑模出has-a或“根據(jù)某物實(shí)現(xiàn)出”
? ? 39、明智而審慎地使用private繼承
? ? 40戒祠、明智而審慎地使用多重繼承
模板與泛型編程? ?
? ? 41晦攒、了解隱式接口和編譯期多態(tài)
? ? 42、了解typename的雙重意義
? ? 43得哆、學(xué)習(xí)處理模板化基類內(nèi)的名稱
? ? 44脯颜、將與參數(shù)無關(guān)的代碼抽離
? ? 45、運(yùn)用成員函數(shù)模板接受所有兼容類型
? ? 46贩据、需要類型轉(zhuǎn)換時(shí)請為模板定義非成員函數(shù)
? ? 47栋操、請使用traits classes表現(xiàn)類型信息
? ? 48闸餐、認(rèn)識template元編程
定制new和delete? ?
? ? 49、了解new-handler的行為
? ? 50矾芙、了解new和delete的合理替換時(shí)機(jī)
? ? 51舍沙、編寫new和delete時(shí)需固守常規(guī)
? ? 52、寫了placement new也要寫placement delete
雜項(xiàng)討論? ?
? ? 53剔宪、不要輕忽編譯器的警告
? ? 54拂铡、讓自己熟悉包括TR1在內(nèi)的標(biāo)準(zhǔn)程序庫