拷贝函数

 

对于一个普通变量之间的赋值可以用一下实现:

int a = 100;

Int b = a;

这样就完成了简单的普通变量的赋值;

在类中我们已经完成了用构造函数初始化类对象,那么我们同样可以类似普通变量赋值一样,用类对象初始化一个新的类对象。例如:

(类不含指针的复制传递

我们可以得到如下结果:

通过上述完成了赋值的功能;其实在我们自己不定义拷贝函数时,系统编译时提供默认构造函数,此例中是:

一般而言,默认的拷贝函数只能将传递进来的类对象的成员变量的值赋值给了新对象的成员变量;但是对于原来的类对象成员变量存储指针的话,那么新对象成员变量也是指针,赋值时将指针地址赋给新对象,故二者指向相同的内存地址。原来的对象内存释放(即析构)时,将成员变量指向的内存就消失了;由于此内存归属不清,新对象的指针成员就成为野指针了。

(二)深层拷贝函数

拷贝函数名称须与类名相同,且有一个常数型引用变量。

深层拷贝,会将原来对象指针所指向的值传递给新对象。例如:

【转载部分文字】

深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝。

浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值