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

本文详细介绍了C++中复制构造函数的特点与使用注意事项,包括其如何处理对象复制过程中的指针问题,以及如何避免析构函数多次调用导致的问题。

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

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

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

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

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

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

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

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

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

        className(const  className &);

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

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

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值