effective C++筆記之條款27:如果不想使用隱式生成的函數就要顯示地禁止它

l        習慣應該堅持下去,不管今天是什麼日子。來自3月17日晚上9點半的總結。

l        比如類模板Array,它所生成的類除了可以進行上下限檢查外,其他行爲和C++標準數組一樣,但標準的數組是不允許數組間賦值的。設計中面臨的一個難題是怎樣禁止掉Array對象間的賦值操作。

l        有如下兩步禁止隱式生成的函數生成:

  1. 聲明這個函數(如operator=),並使之成爲private。顯示地聲明它,就防止了編譯器會自動生成它的版本,使之成爲private就防止了用戶調用它。
  2. 不去實現它。爲了防止友元和成員函數的調用,不去實現它,當友元或成員函數無意中調用了它,鏈接時就會報錯。
template <class T>
class Array
{
private:
//不要定義這個函數
	Array& operator= (const Array& rhs);
}



l   此方法適用於條款45所介紹的(默認構造函數、析構函數、拷貝構造函數、賦值操作符)每一個編譯器自動生成的函數。實際應用中,賦值和拷貝構造函數具有行爲上的相似性,這意味着幾乎任何時候當你想禁止他們其中的一個時,就也要禁止另外一個。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章