C++复制构造函数和析构函数

首先,先来解释一下几个概念:复制构造函数析构函数

复制构造函数:是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并且对他初始化的时,将显示使用复制构造函数。当将该类型的对象传递给函数或者从函数返回该类型的对象的时候,将隐式的使用复制构造函数。

析构函数:是构造函数的互补当,当对象超出作用域或者动态分配的对象被删除时,将自动应用析构函数。析构函数可用于释放对象时构造或在对象声明周期中所获取的资源。不管类是否定义了自己的析构函数,编译器都会自动执行类中非static成员的析构函数。

  通常,编译器会自动的帮我们合成这些复制构造函数是非常精炼的----他们只做必须的工作。但是对某些类而言,依赖于默认定义会导致灾难。实现复制构造操作最困难的部分是最困难的部分,往往在于识别何时需要覆盖默认的版本。有一种特别常见的情况需要类定义自己的复制控制成员的:类具有指针成员


何时调用析构函数:动态分配的对象只有在指向该对象的指针被删除的时候才会撤销。如果没有删除指针指向动态对象的指针,则不会运行该对象的析构函数,兑现过就会一直存在,从而导致内存泄露,而且,对象内部使用的任何资源也不会释放。

何时编写析构函数:许多类不需要编写析构函数,尤其是具有构造函数的类不一定需要定义自己的析构函数。仅有些工作需要析构函数完成时,才需要析构函数。析构函数通常用于释放在构造函数或者对象生命周期内获取的资源。如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这是一个有用的经验法则。这个规则常称为三法则,指的是如果需要析构函数则需要所有的这三个复制控制成员。


析构函数不仅仅用来释放资源。一般而言,析构函数可以执行任意操作,该操作是设计者希望在该类对象的使用完毕后执行的。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值