C++11中,當類中含有不能默認初始化的成員變量時,可以禁止默認構造函數的生成,
myClass() = delete;//表示刪除默認構造函數 myClass() = default;//表示默認存在構造函數
當類中含有不能默認拷貝成員變量時,可以禁止默認構造函數的生成,
myClass(const myClass&) = delete;//表示刪除默認拷貝構造函數,即不能進行默認拷貝 myClass & operator=(const myClass&) = delete;//表示刪除賦值操作符,即不能進行賦值操作
class CTest { public: CTest() = default; //語句1 CTest(int x) { printf("this is CTest(int) create x\n"); } ~CTest() { printf("this is ~CTest destory\n"); } CTest& operator= (const CTest&) = delete; //語句2 }; int main() { CTest* ptr = new CTest; //此處如果沒有語句1,則編譯失敗; CTest p1(1); CTest p2(2); p2 = p1; //此處編譯失敗,因為有語句二存在,已經將賦值操作符設置為已刪除函數 return 0; }