今天同事遇到一个关于拷贝构造函数代码的问题。代码大致如下:
咋一看貌似没囿问题,但是gcc却编译不过去报错如下:
在上面代码中,test类明明已经有构造函数代码和拷贝构造函数代码为什么gcc一定要我给出一个默认構造函数代码出来呢?这个问题就牵涉到了C++构造函数代码中的初始化列表问题了。
在编写构造函数代码的时候很多人都会意思到使用初始化列表来达到避免多次构造的资源损耗,但是在编写拷贝构造函数代码的时候,我们大部分时间都是这样写的
而这就是造成这个問题的症结所在了。对于类而言成员变量仅仅是声明一个变量,而真正的定义是在构造函数代码中做的所以,如果在构造函数代码(包括拷贝构造函数代码)中如果成员变量不是在初始化列表中进行初始化的话,像上面代码中的拷贝构造函数代码的写法其实过程就相当於先调用一次默认构造函数代码对成员变量进行初始化,然后再调用=操作对成员变量进行赋值因此,这就出现了上述gcc要求提供默认构造函数代码的问题了
为了解决这个问题,我们借助初始化列表这个很好的东东把代码改成如下,问题就不见了