經驗:
如果你自己沒聲明,編譯器會自動聲明copy constructor,copy assignment,destructor,
如果你沒有聲明任何構造函數,編譯器會自動聲明default constructor
示例:
如果你寫下
class Empty{ };
將會等價於
class Empty{ public: Empty() {...} //default構造函數 Empty(const Empty &rhs) {...} //copy 構造函數 ~Empty() {...} //析構函數 Empty &operator=(const Empty &rhs) { ... } //copy assignment 操作符 }
只有當這些函數被調用時,編譯器才會創建它們
Empty e1; //default構造函數, 析構函數 Empty e2(e1); //copy 構造函數 e2 = e1; //copy assignment操作符
todo