我们都知道隐式复制构造函数的操作如下:default构造所有成员变量,然后为每个成员变量分配相应的相应值。
我经常需要一个复制构造函数,它将初始化每个成员变量作为副本,而不是默认构造然后分配。 (例如,我有一些const
成员变量。)
问题:手动编写一个复制构造函数,其中初始化每个成员变量作为副本非常乏味,并且数字很荒谬成员变量的增长。有没有办法让隐式复制构造函数使用初始化列表?有没有其他方法可以手动编写初始化列表?
答案 0 :(得分:9)
我们都知道隐式复制构造函数的操作如下:default构造所有成员变量,然后为每个成员变量分配相应的相应值。
不,它并没有真正起作用。 C ++ 11标准第12.8 / 15段规定:
非联合类
X
的隐式定义的复制/移动构造函数执行成员复制/移动 其基地和成员。 [...]每个基础或非静态数据 成员以适合其类型的方式复制/移动:- 如果成员是一个数组,则使用
x
的相应子对象直接初始化每个元素;- 如果成员m的右值引用类型为
T&&
,则会使用static_cast<T&&>(x.m)
进行直接初始化;- 否则,使用
x
的相应基础或成员对基础或成员进行直接初始化。
换句话说:
我经常需要一个复制构造函数,它将每个成员变量初始化为一个副本,而不是默认构造然后分配。 (例如,我有一些const成员变量)。
你的愿望已经成为现实。