C++如何徹底禁止掉對象的複製操作

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

普通的C++菜鳥會說,那我在類的設計裏,不去實現拷貝構造和賦值操作不就完了嗎?其實不行!C++會在背後偷偷的幫你現實一個默認的拷貝構造的版本,我們必須將這個後門給堵死。

禁止掉這些複製的操作,可以將複製相關的操作設置爲私有的,這樣外界就無法對其複製了。

來看看下面的版本一:

class CPeople
{
    // ...
private:
    // 將複製相關的操作定義爲私有
     CPeople(){...};
    const CPeople& operator=(const CPeople& rhis){...}
};
這樣的設計,可以部分的禁止的類的複製,但是對於友元函數和類成員函數來說,還是可以調用其相關的複製操作的。那如何將這最後的兩類函數也對其禁止複製呢?
來看看下面的版本二:

class CPeople
{
    // ...
private:
    // 將複製相關的操作定義爲私有
     CPeople(); // 只聲明不實現
    const CPeople& operator=(const CPeople& rhis); // 只聲明不實現
};
這種做法,纔是真正的實現了對象的禁止拷貝。


另外,你也可以繼承BOOST庫中的boost::noncopable類來實現對象的拷貝禁止功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章