1. 特種成員函數是指在創建類時C++會自動生成的成員函數:默認構造函數、析構函數、複製操作、移動操作。
2. 移動操作(移動拷貝構造函數和移動賦值運算符)僅當類中未包含用戶顯示聲明的複製操作、移動操作和析構函數時編譯器纔會自動生成。
3.
- 顯式聲明的析構函數會刪除複製操作,
- 顯式聲明的移動操作也會刪除複製操作
- 顯式複製構造函數會阻止默認複製構造函數的生成
- 顯式複製賦值運算符會組織默認複製賦值運算符的生成
4. 成員函數模板在任何情況下都不會抑制特種成員函數的生成,舉例如下
class Widget {
public:
template<class T>
Widget(const T& rhs);
template<class T>
Widget &operator=(const T& rhs);
private:
};
另外補充一點:基類特種成員函數對派生類特種成員函數生成的影響
- 基類未定義(刪除)的複製構造函數會阻止派生類默認複製構造函數的生成
- 基類未定義(刪除)的複製賦值運算符會阻止派生類複製賦值運算符的生成