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