说明:如果看不懂的童鞋,可以直接跳到最后看总结,再回头看上文内容,如有不对,请指出~
环境:visual studio 2013(编译器优化关闭)
源代码
下面的源代码修改自http://blog.csdn.net/ljianhui/article/details/9245661
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 class ClassTest 5 { 6 public: 7 ClassTest() 8 { 9 c[0] = '\0'; 10 cout << "ClassTest()" << endl; 11 } 12 ClassTest& operator=(const ClassTest &ct) 13 { 14 strcpy(c, ct.c); 15 cout << "ClassTest& operator=(const ClassTest &ct)" << endl; 16 return *this; 17 } 18 ClassTest(ClassTest&& ct) 19 { 20 cout << "ClassTest(ClassTest&& ct)" << endl; 21 } 22 ClassTest & operator=(ClassTest&& ct) 23 { 24 strcpy(c, ct.c); 25 cout << "ClassTest & operator=(ClassTest&& ct)" << endl; 26 return *this; 27 } 28 ClassTest(const char *pc) 29 { 30 strcpy(c, pc); 31 cout << "ClassTest (const char *pc)" << endl; 32 } 33 //private: 34 ClassTest(const ClassTest& ct) 35 { 36 strcpy(c, ct.c); 37 cout << "ClassTest(const ClassTest& ct)" << endl; 38 } 39 virtual int ff() 40 { 41 return 1; 42 } 43 private: 44 char c[256]; 45 }; 46 ClassTest f1() 47 { 48 ClassTest c; 49 return c; 50 } 51 void f2(ClassTest ct) 52 { 53 ; 54 } 55 int main() 56 { 57 ClassTest ct1("ab");//直接初始化 58 ClassTest ct2 = "ab";//复制初始化 59 ClassTest ct3 = ct1;//复制初始化 60 ClassTest ct4(ct1);//直接初始化 61 ClassTest ct5 = ClassTest("ab");//复制初始化 62 ClassTest ct6 = f1(); 63 f1(); 64 f2(ct1); 65 return 0; 66 }