复制构造函数的疑惑

 复制构造函数是为类成员之间的复制定义的一个类的成员函数。对许多类而言,合成复制构造函数只完成必要的工作。只包含类类型成员或内置类型(但不是指针类型)成员的类,无须显式地定义复制构造函数,也可以复制。那么复制构造函数应在什么时候必须自定义呢。当我们在类中定义了指针,动态的分配了资源,或在类中必须完成某些特定的操作时,这时就必须自定义复制构造函数。论谈上的朋友告诉我说:涉及到身深拷贝的时候就要显式地去定义一个拷贝构造函数,比如内存操作,指针等。 另外需要在拷贝的过程当中需要实现特定的功能也需要显式地去定义构造函数!,比如要实现某个类的特定对象的个数的统计。
    具体的深拷贝我也不太明白但心里也有这么一个概念。有朋友说要深入的了解,看看深入对象模型。 如果涉及到要设计有关数据结构的类如存储数据的就要自定义。
    指针的问题:如果用合成的复制构造函数去复制指针,那将会有非常可怕的后果。看例子:string str="ooo"; string str2="aaa";当用str=str2时会产生这样的效果: 第一,str曾指向的内存永远不会被删除,因而会永远丢失。这是产生内存泄漏的典型例子。第二,现在str和str2包含的指针指向同一个字符串,那么只要其中一个离开了它的生存空间,其析构函数就会删除掉另一个指针还指向的那块内存。此时str指向的空间已经改变无法释放内存,如果释放了解str2那么,这块内存将会被系统存放其它的值,str再来访问时会无法访问。
   这就是我理解的复制构造函数了。呵呵,希望大家多提议建。
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值