[原創文章歡迎轉載,但請保留作者信息]
Justin 于 2009-10-30
Item5和Item6說的東東很接近,難道是Scott討厭54這個數才把一個Item分成兩個湊成55的?
如果沒有定義類的構造函數/拷貝函數/拷貝構造函數/析構函數,編譯器會自作主張幫你定義這些函數,而且還是public外加inline的。(估計這是最冷的冷飯了)
當然編譯器的智商也是有限的,在幫你寫拷貝函數時僅限于幫你處理一下諸如int的內嵌類型(build-in type)以及自身就有拷貝函數的類對象,再復雜一點的就搞不定了。
上面就是Item5的內容,Item6站在巨人的肩膀上,找到了如何禮貌謝絕編譯器傻乎乎地幫你做這些事情:
?? 有時候需要禁止某個類對象的拷貝操作,就要避免以上函數的自動生成,需要自己定義這些函數,并且有以下特性
-
private
-
只是聲明,不給予實現(give no implementation)
當然要是還是覺得麻煩,干脆直接繼承Boost的noncopyable(自己寫一個類似的也可以),就可以不費吹灰之力的獲得不能拷貝的特性。
什么?寫完了?貌似沒吃飽啊……