【C++】类和对象之拷贝构造

目录

一、概念

二、特性

1、拷贝构造是一个重载形式

 2、拷贝构造必须传引用传参

1)为什么必须传引用传参呢?

2)为什么传值传参会引发无穷调用呢?

 3、默认拷贝构造函数

​ 1)涉及资源申请

2)必须调用拷贝构造

​三、拷贝构造函数典型调用场景



一、概念

在创建对象时,可否创建一个与已存在对象一某一样的新对象呢?C++用拷贝构造解决这个问题。

拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。

二、特性

1、拷贝构造是一个重载形式

拷贝构造函数是构造函数的一个重载形式。所以拷贝构造名跟类名相同,只是参数不同。

❓那为什么一定要加const呢?

【解答】是为了减少错误。const修饰的被拷贝的对象,被拷贝的对象是不能修改的。 

 2、拷贝构造必须传引用传参

拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错, 因为会引发无穷递归调用。

1)为什么必须传引用传参呢?

内置类型,编译器可以直接拷贝

自定义类型的拷贝,需要调用拷贝构造函数

2)为什么传值传参会引发无穷调用呢?

对于自定义类型,采用传值形式的话,那么调用函数就需要传参,传的是形参,是实参的一份拷贝,就必须调用一次拷贝构造函数形成形参。

调用函数就要先传参,传参就会形成一个新的拷贝构造........

 3、默认拷贝构造函数

若未显式定义,编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝叫做浅拷贝,或者值拷贝。

默认生成的拷贝函数:
1.内置类型完成值拷贝/浅拷贝----按byte一个一个拷贝。
2.自定义类型会调用相对应的拷贝构造/赋值重载。

 

 1)涉及资源申请

如果自定义类型涉及到资源申请调用默认拷贝构造,程序会崩溃。

2)必须调用拷贝构造

自定义类型涉及到资源申请,必须调用拷贝构造函数

三、拷贝构造函数典型调用场景

🟢使用已存在对象创建新对象

🟢函数参数类型为类类型对象

🟢函数返回值类型为类类型对象 

注意:为了提高程序效率,一般对象传参时,尽量使用引用类型,返回时根据实际场景,能用引用 尽量使用引用。引用可以避免开辟空间。 

  • 14
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值