C 如何徹底禁止掉物件的複製操作

2021-06-26 21:40:42 字數 594 閱讀 5219

在物件導向的世界中,有一些物件是需要保持獨一無二的,如設計乙個「公民」的類,每個公民都是唯一的,有唯一的身份證號與其對應。任何對該物件的複製都是毫無意義的,需要在類的設計上被徹底禁止掉。

普通的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中宣告函式,但是不實現,那麼呼叫這個函式也是會出錯...