使用一个已经创建完成的对象来初始化一个新对象
1 2 3 4
| void test01(){ Person p1(10); Person p2(p1); }
|
注意: Person p2=p1;会调用拷贝构造函数,
而Person p2;p2=p1;不会调用拷贝构造函数,为赋值操作
以值传递的方式给函数的参数传值
1 2 3 4 5 6 7 8
| void doWork(Person p){
}
void test02(){ Person p1; doWork(p1);调用函数,并将对象p1传入 }
|
以值的方式返回局部对象
1 2 3 4 5 6 7 8
| Person doWork02(){ Person p; return p; }
void test03(){ Person p1 = doWork02(); }
|
注意: 这种有个专门的优化,当你的函数返回一个自定义类的对象的时候,编译器可以优化掉返回这个过程,可以简单认为这期间只创建了一次对象,所以不会调用拷贝构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include <iostream> using namespace std;
class Person { public: Person() { cout << "无参构造函数" << endl; mAge = 10; }
Person(int age) { cout << "有参构造函数" << endl; mAge = age; } Person(const Person& p) { cout << "拷贝构造函数" << endl; mAge = p.mAge; }
~Person() { cout << "析构函数!" << endl; } int mAge; };
void test01(){ Person p1(10); Person p2; p2=p1;
}
void doWork01(Person p){
}
void test02(){ Person p1; doWork01(p1); }
Person doWork02(){ Person p; return p; } void test03(){ Person p1 = doWork02(); }
int main(){ test01(); test02(); test03(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Person { public: Person() { cout << "无参构造函数" << endl; mAge = 10; } Person(int age) { cout << "有参构造函数" << endl; mAge = age; } Person(const Person& p) { cout << "拷贝构造函数" << endl; mAge = p.mAge; } ~Person() { cout << "析构函数!" << endl; } int mAge; };
|