1. 如果沒有宣告任何建構函式,編譯器會為你宣告一個default建構函式
2. 惟有default建構函式被需要,才會被編譯器建立出來
class Empty { public: Empty() {}//1. 預設構造 ~Empty() {} //2. 解構函式 Empty(const Empty& rhs) {} //3. copy構造 Empty& operator=(const Empty& rhs) {} //4. copy賦值 };
1. 宣告瞭建構函式,編譯器於是不再為它建立default建構函式
2. 內建型別預設複製構造,每個成員變數對應初始化
3. 內建型別預設複製賦值基本於預設複製構造一致
4. 對於成員變數為引用型別或const型別,拒絕生成預設複製構造和賦值
template<typename T> class NameObject { public: NameObject(): nameValue(),objectValue() {} NameObject(const std::string& name, const T& value) : nameValue(name), objectValue(value) {} const std::string& NameValue()const { return nameValue; } private: //std::string& nameValue; //拒絕生成 //const std::string nameValue; //拒絕生成 std::string nameValue; T objectValue; }; void Test00() { NameObject<int> no1("Smallest Prime Number", 2); NameObject<int> no2(no1); //呼叫預設複製構造 std::cout << no2.NameValue() << std::endl; NameObject<int> no3; no3 = no1; //呼叫預設複製賦值 std::cout << no3.NameValue() << std::endl; }