我在这个题目中不想解释什么,只是针对书中一个例题的一点分析而已。因为COPY构造函数的运用涉及到临时对象的生成和销毁,而且这个过程是悄无声息的,所以很难引起人们的注意。所以请看下面的图片:
这个图中有默认的构造函数,它对类中的静态成员进行递增运算。一个以值传递方式接受对象参数的函数,因为是值传递所以它会用到COPY构造函数创建一个临时对象。还有一个析构函数对静态成员变量进行递减。它们用来对程序中实际产生的对象进行计数操作。
这个静态成员被初始化为0。
下面来看程序:
从上图可知总共有3个对象被创建,一个临时对象被创建,总共4个对象,程序运行的结果是:
由上图可知析构函数被调用了4次其结果应该是0才对,现在为啥是-1呢?因为析构函数被调用4次所以构造函数肯定也被调用了4次。但是默认的构造函数只显示了3次,那么剩下的那个构造过程是由谁来完成的呢?现在我把程序变动一下。
现在我把自定义COPY构造函数的注释去掉了再运行。
可以看出那个临时的对象也是经过构造的并且它是用COPY构造函数构造完成的,而编译器提供的默认COPY构造函数并不能给出明确提示,所以你只能自定义COPY构造函数,我想这就是作者所谓的显式COPY构造函数吧。