使用一个已经创建完成的对象来初始化一个新对象

1
2
3
4
void test01(){
Person p1(10);//创建完的对象p1
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;
};