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

来源:互联网 发布:查询iphone网络制式 编辑:程序博客网 时间:2024/04/30 01:08

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

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

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

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


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

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


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



0 0