1

假设我有一个包含一些字段的结构,我可能会弄乱它们(添加、删除)。

struct Something
{
 int number;
 int stuff[4];

 //... many other things

 Something(const Something& something, int newnumber) : number(newnumber)
 {
  //is there any way to default the rest to copy?
 }
};

我没有声明一个复制构造函数(使用默认值),所以它显然可以处理任何基本情况(没有指针等)。但是,我也希望能够通过改变一件事来复制我的结构。这意味着我需要填写一个包含所有要复制的内容的初始化列表,并在每次我的结构内容更改时更改它。即使我未声明的复制构造函数可以方便地处理更改而无需我的干预。

有什么办法可以利用默认的复制构造函数,这样我就不必在每次弄乱我的结构内容时更改我的“一次更改复制”构造函数?

编辑:构造函数委托导致这些错误:

Something(const Something& something, int newnumber) : Something(something), number(newnumber) {}

对委托构造函数的调用应是唯一的成员初始化器
“编号”:已初始化

4

2 回答 2

1

不幸的是,不,除非您将默认构造代码分解为一个单独的函数,并从该函数和复制构造函数中调用它。

但是,构造委托在 c++11中。

于 2013-02-03T22:10:24.077 回答
1

对委托构造函数的调用应该是唯一的成员初始化器

您不能这样做,因为默认构造函数已经初始化number,因此您将初始化number两次。你能做的最好的就是在ctor体内移动 number(newnumber) ,即number = newnumber;。作为一般规则,您应该将逻辑放在具有大多数参数的构造函数中,并将所有其他构造函数委托给它(尽管在您的示例中这可能是不可能的)。

于 2013-02-04T03:33:31.777 回答