Effective C++ 筆記2(構造,析構,賦值)

條款5:瞭解C++默默編寫而且調用了哪些函數安全

一、  構造函數,析構函數,拷貝賦值函數,拷貝構造函數。函數

class Empty
{
public:
    //默認構造函數
    Empty(){};
    //拷貝構造函數
    Empty(const Empty& rhs){}
    //析構函數
    ~Empty(){}

    //拷貝賦值函數
    Empty& operator=(const Empty& rhs){};
};

    //默認構造函數
    Empty e1;
    //拷貝構造函數
    Empty e2(e1);
    //拷貝賦值函數
    Empty e3=e1;

 

二、  類中包含引用的時候沒法進行通常的賦值操做,必須本身定義拷貝賦值操做符this

 

條款6:若不想使用編譯器自動生成的函數就應該明確拒絕spa

一、  聲明爲private能夠阻止(單不絕對安全,member函數和friend函數還能夠調用)code

class Empty
{
public:
    //默認構造函數
    Empty(){};
    //析構函數
    ~Empty(){}

private:
    //拷貝構造函數
    Empty(const Empty& rhs){}
    //拷貝賦值函數
    Empty& operator=(const Empty& rhs){};
};

 

二、  聲明一個uncopyable的基類,再繼承它對象

 

class Empty:private Uncopyable
{
public:
    //默認構造函數
    Empty(){};
    //析構函數
    ~Empty(){}

};

class Uncopyable
{
public:
    //默認構造函數
    Uncopyable(){};
    //析構函數
    ~Uncopyable(){}

private:
    //拷貝構造函數
    Uncopyable(const Uncopyable& ){}
    //拷貝賦值函數
    Uncopyable& operator=(const Uncopyable& ){};
};

 

條款7:爲多態基類聲明virtual析構函數blog

一、  基類的析構函數要加virtual,防止delete的時候局部銷燬繼承

二、  不是基類別就不須要編譯器

 

條款8:別讓異常跳出析構函數編譯

一、  析構函數在處理的時候必定要加上try catch

二、  若是須要對異常進行反應,則把處理寫成一個普通的方法處理,加上標誌位,運行正常後再在析構函數中處理

 

條款9:毫不在構造函數和析構函數中調用virual函數

 

條款10:令operator= 返回一個reference to *this

一、  class& operator=(){return *this}

 

 

條款11:在operator=中處理自我輔值

一、肯定在一個函數中包含2個對象的時候,這兩個對象是同一個對象的狀況下是否正確

 

條款12複製對象時勿忘記其每個成分

一、

相關文章
相關標籤/搜索