在物件導向的世界中,有一些物件是需要保持獨一無二的,如設計乙個「公民」的類,每個公民都是唯一的,有唯一的身份證號與其對應。任何對該物件的複製都是毫無意義的,需要在類的設計上被徹底禁止掉。
普通的c++菜鳥會說,那我在類的設計裡,不去實現拷貝構造和賦值操作不就完了嗎?其實不行!c++會在背後偷偷的幫你現實乙個預設的拷貝構造的版本,我們必須將這個後門給堵死。
禁止掉這些複製的操作,可以將複製相關的操作設定為私有的,這樣外界就無法對其複製了。
來看看下面的版本一:
class cpeople
; const cpeople& operator=(const cpeople& rhis)
};
這樣的設計,可以部分的禁止的類的複製,但是對於友元函式和類成員函式來說,還是可以呼叫其相關的複製操作的。那如何將這最後的兩類函式也對其禁止複製呢?
來看看下面的版本二:
class cpeople
;
這種做法,才是真正的實現了物件的禁止拷貝。
另外,你也可以繼承boost庫中的boost::noncopable類來實現物件的拷貝禁止功能。
C 如何禁止掉物件的複製操作
最容易想到的是將拷貝建構函式與賦值函式宣告為private。但是,private只是說外部不能直接呼叫,但是可以間接通過類的成員函式與友元函式對其訪問。那麼怎麼辦呢?在類中,允許宣告函式,但是,可以不用實現該函式,這是合法的。那麼即使是在public中宣告函式,但是不實現,那麼呼叫這個函式也是會出錯...
C 如何禁止掉物件的複製操作
那麼好了我們可以特性一起使用,boost noncopyable cpp view plain copy print?ifndef boost noncopyable hpp included define boost noncopyable hpp included namespace boost...
C 如何禁止掉物件的複製操作
最容易想到的是將拷貝建構函式與賦值函式宣告為private。但是,private只是說外部不能直接呼叫,但是可以間接通過類的成員函式與友元函式對其訪問。那麼怎麼辦呢?在類中,允許宣告函式,但是,可以不用實現該函式,這是合法的。那麼即使是在public中宣告函式,但是不實現,那麼呼叫這個函式也是會出錯...