Person (const Person &p) // 必须要加const,而且传入的必须是引用。加const就是说p是无法进行修改。
{
// 将p身上的所有成员复制给本身
m_Age = p.m_Age;
}
实例化对象时,不要加括号,除非要传入参数。不然会出错的。因为编译器会认为这是在创建一个函数。
Person p1(); // 返回的是Person类,函数名叫p1
Person p1; // 这样才是对的
Person (10) // 创建了一个匿名对象,这个对象在这一句执行完之后就被删除
// 不要利用拷贝函数创建匿名对象
Person (p3) //编译器会认为Person (p3) 就是Person p3;
Person p1 = Person (p3); // 等价于 Person p1 = p3;
Person p1(p3);
什么时候会调用拷贝构造函数
1、使用一个已经存在的对象初始化一个新的对象
Person p1;
Person p2(p1);
2、值传递给某个函数
void fun1(Person p)
{
// 当调用这个函数时,其实会复制一个p的副本传进这个函数内进行运算
}
3、值的方式返回局部对象
Person fun1()
{
Person p1;
return p1; // 这里返回的也不是p1自己,而是复制了个副本传出去。
}