c++ 学习 -- 复制构造函数

复制构造函数是个非常微妙的函数,如果不能深刻理解它,可是会出现很多莫名奇妙的错误,下面通过一个程序来详细的介绍其中的奥妙。

1 c++中的隐士成员函数

(1)默认构造函数,如果没有定义

(2)复制构造函数,如果没有定义

(3)赋值操作符,如果没有定义

(4)默认析构函数,如果没有定义

(5)地址操作符,如果没有定义

2 重点讲一下复制构造函数

复制构造函数讲一个对象复制 到一个新建的对象中,也就是说,它用于初始化的过程中,而不是常规的赋值过程中。

className(const className &);

(1)复制构造函数的功能

逐个复制非静态成员,复制的是值。这就会导致一个问题,在对象中有指针时,只是复制的指针的地址,而没有复制实际的内容,这时,我们必须显示的定义复制构造函数来解决这个问题。

(2)复制构造函数并没有在构造函数中增加新建对象的个数,但是他却会调用析构函数,这就会导致你在构造函数中的计数不准确。

(3)就像(1)中提到的,它只是复制了指针的地址,因此,对象调用析构函数的时候,最先调用析构函数的那个对象释放了指针指向的空间,但是当其他对象再次调用析构函数的时候,还会去释放这段空间,这就导致了同一个空间被delete两次,同常表现为乱码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值