关于C++拷贝构造函数我想说

如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。默认的拷贝构造函数是浅拷贝,会造成内存泄漏。

解释

本质上就是构造函数(特殊),用一个已有的对象整体初始化新的对象

如
student s1(01,"zz",18);//比如你创建了一个学生对象s1 学号是01  名字是zz  年龄是18  
//这时候你调用构造函数  完成了对象s1的初始化

student s2;
s2 = s1;

//创建了对象s2  但是没有初始化,然后通过s1初始化s2

调用时机

  1. 对象以值传递的方式传入函数参数;
  2. 对象以值传递的方式从函数返回;
  3. 对象通过另外一个对象进行初始化。

分类

浅拷贝:只是对对象进行简单的赋值,拷贝后两个指针指向同一个内存空间,会使析构函数释放两次。
深拷贝:在对含有指针成员的对象进行初始化的时候,必须使用自己定义的拷贝构造函数(创建一个private的拷贝构造函数),使拷贝后的指针成员有自己的内存空间。

//写学生类的拷贝构造函数
student(const student &s)
{
	this->name = new  chat[strlen(s.name)+1];
	strcpy(this->name,s.name);
}

最后:对象的赋值和复制有什么区别?应用场景是怎么样的?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值