C++. 理解特種成員函數的生成規則. 很重要的知識點

1. 特種成員函數是指在創建類時C++會自動生成的成員函數:默認構造函數、析構函數、複製操作、移動操作。

2. 移動操作(移動拷貝構造函數和移動賦值運算符)僅當類中未包含用戶顯示聲明的複製操作、移動操作和析構函數時編譯器纔會自動生成。

3.

  1. 顯式聲明的析構函數會刪除複製操作,
  2. 顯式聲明的移動操作也會刪除複製操作
  3. 顯式複製構造函數會阻止默認複製構造函數的生成
  4. 顯式複製賦值運算符會組織默認複製賦值運算符的生成

4. 成員函數模板在任何情況下都不會抑制特種成員函數的生成,舉例如下

class Widget {
public:
    template<class T>
    Widget(const T& rhs);

    template<class T>
    Widget &operator=(const T& rhs);
private:
};

另外補充一點:基類特種成員函數對派生類特種成員函數生成的影響

  1. 基類未定義(刪除)的複製構造函數會阻止派生類默認複製構造函數的生成
  2. 基類未定義(刪除)的複製賦值運算符會阻止派生類複製賦值運算符的生成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章