條款26:盡可能延後變數定義式的出現時間
盡可能延後變數的定義,知道非得使用該變數的前一刻為止
方法a:
widget w;for (int i = 0; i < n; ++i)
方法b:
for (int i = 0; i < n; ++i)
方法a:乙個建構函式 + 乙個析構函式 + n個賦值操作
方法b:n個建構函式 + n個析構函式
條款27:盡量少做轉型
const_cast(expression):唯一可以將物件的常量性移除(將 const 轉 non-const)dynamic_cast
(expression):除單元測試可以使用以外,其餘情況禁用
reinterpret_cast
(expression): 指標型別的轉型,較少使用
static_cast
(expression):顯式轉型,最常用,c++中禁用c語言舊式轉型方法
強制函式呼叫使用虛函式的特定版本(規避多型執行),請使用作用域操作符:
virtualvoid derived::func(int
x)
派生類虛函式呼叫基類版本時,必須顯式使用作用域操作符
條款28:避免返回handle(reference、pointer、iterator)指向物件內部成分(注意不是函式體內的local變數)
遵守這條規則,可以增加封裝性,規避潛在風險
條款29:為"異常安全
"而努力是值得的
classprettymenu;
void prettymenu::changebackground(std::istream&imgsrc)
上面函式沒有異常安全性,因為異常安全性函式:
不洩漏任何資源:上述**中當 new image 發生異常時,互斥器就永遠不會釋放
不允許資料敗壞:上述**中當 new image 發生異常時, imagechange已經被累加,其實新的背景影象並沒有成功安裝
任何使用動態記憶體的東西(例如所有stl容器)如果無法找到足夠記憶體滿足需求,通常會丟擲乙個 bad_alloc 異常
對於上述**,我們使用物件來管理資源(image和mutex):
classprettymenu;
void prettymenu::changebackground(std::istream&imgsrc)
條款30:透徹了解 inline 的裡裡外外
類的成員函式在類內定義時該函式預設為 inline 函式
inline 函式通常位於標頭檔案內
乙個表面看似 inline 的函式是否真的是 inline,取決你的 build environment,主要取決於編譯器
inline 是個申請,編譯器可以加以忽略,大部分編譯器拒絕將太過複雜的函式、virtual 函式 inline
編譯器通常不對"通過函式指標而進行的呼叫"實施 inline
可以聯想 自定義比較函式comp通過函式指標傳遞給sort,實際上指標呼叫未inline,故sort比qsort快
將大多數 inline 限制在小型(小於10行)被頻繁呼叫的函式身上(注意建構函式、析構函式、虛函式、遞迴函式通常不能 inline)
條款31:將檔案間的編譯依存關係降至最低
如果乙個foo.cc檔案,則最佳的標頭檔案排序方式:(可有效減少隱藏依賴)
foo.h(即原始檔對於的標頭檔案)c語言標準庫標頭檔案
c++語言標準庫標頭檔案
windows標頭檔案(或者unix標頭檔案)
mfc標頭檔案(或者posix標頭檔案)
第三方專案標頭檔案(例如google開源**標頭檔案、boost標頭檔案)
本專案其他標頭檔案
使用pimpl(pointer to implementation)手法,將介面與實現分離,以"宣告的依存性" 替換 「定義的依存性」
EC 學習筆記 三 資源管理
條款13 以物件管理資源 資源包括 動態分配記憶體 檔案描述符 網路socket 互斥鎖 資料庫連線 把資源放進物件內,可以依賴c 的 析構函式自動呼叫機制 確保資源被釋放 智慧型指標 是乙個 類指標 物件,引用計數型指標,當引用物件數為0時,自動刪除該資源 std shared ptrpclass...
C 學習筆記(五)
今天來學習一下overload 過載 它和override 重寫是有區別的。通常,自然語言中同乙個詞可以代表多種不同的含義,具體含義要依賴上下文來確定。這就是所謂的一次多義 該詞被過載 overload 了。在c 中,還有另外乙個因素會使函式名過載 建構函式。因為建構函式的名字預先由類的名字確定,所...
Qt Model View 學習筆記 五
view 類 概念 在model view架構中,view從model中獲得資料項然後顯示給使用者。資料顯示的方式不必與model提供的表示方式相同,可以與底層儲存資料項的資料結構完全不同。內容與顯式的分離是通過由qabstractitemmodel 提供的標準模型介面,由qasbstractite...