一. 避免進行重編譯:(cheshire cat)
如果我們可以很好的隱藏類的實現那麼對於實現的改動將不會導致已有**的崩潰,不過它通常都會要求我們重新編譯這些**。
如:對內聯函式定義的改動,對於物件大小的改動,以及對於使用內聯函式訪問的物件結構的改動都將導致程式的重新編譯。我們
可以使用控制代碼來避免這些重編譯:如果我們改動了rep 的實現,使用者要做的只是重新連線(而不是編譯)一下他們的程式。
下面是乙個新版本的string類,在其中我們沒有使用計數器,而是使用了控制代碼來減少編譯時期的依賴關係:
//檔案 string.h
class string_rep;
class string
;另外乙個標頭檔案是乙個私有的標頭檔案,我們不需要將它分發給使用者。它裡面包含了rep 類的完整宣告:
//檔案 string_priv.h
#include "string.h"
class string_rep
;用該私有標頭檔案來編譯string和string_rep的成員:
#include "string_priv.h"
string::string(const char* cp)
:rep(new string_rep(cp))
Python程式設計慣用法
一般交換兩個值是借助中間變數來實現,不過python有更簡單的實現方式 x,y y,x 這種方式耗時少,也更加簡潔。之所以能這樣,因為一般情況下python的表示式的計算順序是從左到右,但是遇到表示式賦值的時候,表示式右邊的操作會先於左邊的運算元計算,因此表示式 exp3,exp4 exp1,exp...
C 之RAII慣用法
c 中的raii全稱是 resource acquisition is initialization 直譯為 資源獲取就是初始化 但是這翻譯並沒有顯示出這個慣用法的真正內涵。raii的好處在於它提供了一種資源自動管理的方式,當產生異常 回滾等現象時,raii可以正確地釋放掉資源。舉個常見的例子 在資...
C 之RAII慣用法
c 中的raii全稱是 resource acquisition is initialization 直譯為 資源獲取就是初始化 但是這翻譯並沒有顯示出這個慣用法的真正內涵。raii的好處在於它提供了一種資源自動管理的方式,當產生異常 回滾等現象時,raii可以正確地釋放掉資源。舉個常見的例子 cp...