2013-02-03 32 views
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) {} 

到委託構造函數的調用應是唯一的成員初始化
「數字」:已初始化

+1

是的在C + + 11,可能與C + + 03中的額外功能。 – ipc

+0

C++ 11支持委託構造函數,它可以幫助你實現你想要的東西 –

+0

老實說,我會更習慣於's2 s1(s1); s2.number = newNumber;'。類似這樣的每個成員的基礎是大量的維護,而不是基於每個成員的基礎引起混淆,哪些成員擁有它,哪些沒有。 – chris

回答

1

到委託構造函數的調用應是唯一的 成員初始化

你不能這樣做,因爲默認的構造函數初始化已經number,所以你會被初始化number兩次。你可以做的最好的是移動號碼(新號碼)在ctor的身體內,即number = newnumber;。作爲一般規則,你應該把大部分參數放在構造函數中,然後把所有其他構造函數委託給它(也許這在你的例子中是不可能的)。

1

不幸的是,沒有,除非你將默認的構造代碼分解爲一個單獨的函數,並從該構造函數和複製構造函數中調用它。

建設代表團is in c++11,但。