拷贝构造函数的调用时机:
class Person { public: //构造函数 Person() { //无参构造函数 } Person(int a) { //有参构造函数 cout << "有参构造函数" << endl; } Person(const Person &p) { //拷贝构造函数,前面必须加const,拷贝过来的不能再修改了,固定的,就是说你拷贝过来了张三,不能再修改成张四(p.name=""),只能是原版张三 //传过来的&p是对象,p就是指针 age = p.age;//age被赋值 cout << "拷贝构造函数" << endl; } ~Person() { cout << "析构函数" << endl; } int age; };
第一种:使用已经创建好的对象来初始化新的对象
void test01() { //拷贝构造函数的几种方式 //第一种方式:直接赋值拷贝对象 Person p1; p1.age = 33;//已经创建好了对象 Person p2 = p1;//相当于拷贝了p1给p2 fun(p2);
第二种方式:值传递的方式拷贝
//第二种方式:值传递的方式拷贝 void fun(Person &p1) {//相当于Person p=Person(p2),拷贝构造函数,建议使用引用,节省一份新的开销,不用新的内存空间 cout << "fun函数:" << p1.age << endl; }
void test01() { Person p1; p1.age = 33;//已经创建好了对象 Person p2 = p1;//相当于拷贝了p1给p2 fun(p2);//传递p2给fun函数
第三种方式:以值方式返回局部对象
//第三种:以值方式返回局部对象int xxx(){},Person xxx(){},结构体或者是函数的话,都可以不去加() Person fun1() { Person p; p.age = 3333; return p; }
//第三种方式: Person p3 = fun1();
release模式下会做优化,debug模式下没有做优化
release模式下结果:第三种方式的
原文地址:https://www.cnblogs.com/yunxintryyoubest/p/10682698.html
时间: 2024-11-09 23:32:52