拷贝构造函数、 深拷贝&浅拷贝

本文探讨了拷贝构造函数的概念及其在不同情况下的应用,包括默认拷贝构造函数与自定义拷贝构造函数的区别,以及深拷贝与浅拷贝的工作原理和实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于基本数据类型,拷贝构造函数类似如下:

int a = 10;

float b = 100.0;

而对于自定义的结构,拷贝构造函数并没有那么随意。

  • 默认拷贝构造函数&浅拷贝

当用户未声明拷贝构造函数时,系统会自动生成一个默认的拷贝构造函数,它实现位拷贝。这就引出了浅拷贝。

浅拷贝:当对象具有资源(堆、系统资源等)时,拷贝时未重新分配该资源(而是和被拷贝对象共享)。反之,叫做深拷贝。浅拷贝容易造成资源的归属不明确,释放时可能会导致出现错误(共享指针了解下)。

  • 自定义拷贝构造函数

可以通过自定义拷贝函数来实现数据的深拷贝。拷贝函数定义格式如下

ClassName(const ClassName & p){}

拷贝构造函数和构造函数有相似之处也有区别,主要时参数必须时一个同类型对象的常引用。

class student{
public:
    student(cosnt student& s){
        nomber = new int;
        *nomber = *s.nomber;
    }
private:
    int* nomber;
}
  • 注意:默认拷贝构造函数、自定义拷贝构造函数深拷贝、浅拷贝无直接关系。深、浅拷贝的区分以拷贝构造函数的实际定义方式为准。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值