天天看點

讀書筆記MoreEffectiveC++(26)

限制某個類所能産生的對象數量

1.阻止建立某個類的對象,最容易的方法就是把該類的構造函數聲明在類的private域

2.這個設計由三個部分組成,第一、Printer 類的構造函數是private。這樣能阻止建立對象。第二、全局函數thePrinter 被聲明為類的友元,讓thePrinter 避免私有構造函數引起的限制。最後thePrinter 包含一個靜态Printer 對象,這意味着隻有一個對象被建立。

3.任何能在全局域聲明東西也能在命名空間裡聲明。包括類、結構、函數、變量、對象、typedef 等等。把它們放入命名空間并不影響它們的行為特性,不過能夠防止在不同命名空間裡的實體發生命名沖突。

4.在類中的靜态對象實際上總是被構造(和釋放),即使不使用該對象。與此相反,隻有第一次執行函數時,才會建立函數中的靜态對象,是以如果沒有調用函數,就不會建立對象。

5.:“帶有内部連結的函數可能在程式内被複制(也就是說程式的目标(object)代碼可能包含一個以上的内部連結函數的代碼),這種複制也包括函數内的靜态對象。”結果如何?如果建立一個包含局部靜态對象的非成員函數,你可能會使程式的靜态對象的拷貝超過一個!是以不要建立包含局部靜态資料的非成員函數。

繼續閱讀