C++拷贝构造函数调用时机有3中
1.将一个已经创建的对象来初始化另一个对象
1 stu s2(10); //有参构造函数调用2 stu s3(s2);//拷贝构造函数调用3 cout << "s2 age is " << s2.s_age << endl;
2.值传递的方式给函数传值
1 void work(stu s) 2 { 3 4 } 5 void test01() 6 { 7 stu s; 8 work(s); 9 }10 int main()11 {12 //test();13 test01();14 return 0;15 }
3.以值方式返回局部对象
1 stu go() 2 { 3 stu p1; 4 cout << (int*)&p1 << endl; 5 return p1; 6 } 7 8 void test02() 9 {10 stu w = go();11 cout << (int*)&w << endl;12 }13 int main()14 {15 //test();16 //test01();17 test02();18 return 0;19 }
完整代码
1 #include2 using namespace std; 3 4 class stu 5 { 6 public: 7 stu() 8 { 9 puts("stu无参构造函数调用"); 10 }11 12 stu(int age)13 {14 s_age = age;15 puts("stu有参构造函数调用");16 }17 18 stu(const stu &s)19 {20 //将传入的学生的所有属性全部拷贝到我身上 21 s_age = s.s_age;22 puts("stu拷贝构造函数调用");23 }24 ~stu()25 {26 puts("stu析构函数调用");27 }28 int s_age;29 };30 //调用 31 void test()32 {33 34 stu s2(10); //有参构造函数调用35 stu s3(s2);//拷贝构造函数调用36 cout << "s2 age is " << s2.s_age << endl;37 cout << "s3 age is " << s3.s_age << endl;38 }39 40 void work(stu s)41 {42 43 }44 void test01()45 {46 stu s;47 work(s);48 }49 50 stu go()51 {52 stu p1;53 cout << (int*)&p1 << endl;54 return p1;55 }56 57 void test02()58 {59 stu w = go();60 cout << (int*)&w << endl;61 }62 int main()63 {64 //test();65 //test01();66 test02();67 return 0;68 }