1. 程式人生 > >《Effective C++》條款6:若不想使用編譯器自動生成函式,就該明確拒絕

《Effective C++》條款6:若不想使用編譯器自動生成函式,就該明確拒絕

         條款5中講了編譯器會預設為我們定義一些函式,①copy建構函式 ②copy assignment ③解構函式④default建構函式 ,那如果我們不想使用這些函式怎麼辦?條款5中講到了,什麼情況我們需要自己定義cpoy assignment和copy 建構函式,要是碰到一種情況,我們不希望物件有這些屬性,不希望它能夠被拷貝,該如何去做?

方法一:將copy建構函式和 copy assignmen 宣告為private,不去實現

       這樣可以成功的阻止呼叫這兩個函式但是這種做法並不是絕對安全的,因為private可以被friend函式訪問到,但是你沒有去定義這兩個函式,當友元函式去呼叫的時候,在連線的階段會會發生連線錯誤

方法二:設計一個專門阻止copying動作的base類

class Uncopyable
{
protected:
   Uncopyable(){}
    ~Uncopyable(){}
private:
    Uncopyable(const Uncopyable&);
    Uncopyable& operator =(const Uncopyable &);
}

class HomeForSale:private Uncopyable
{

}

     這樣一來要想呼叫HomeForSale 的物件的copy assingment和 copy建構函式,首先需要呼叫base的copy和copy assignment函式,