好吧,我在閱讀「effective C++」,第12項說請不要在拷貝構造函數中調用拷貝賦值。但是在我嘗試這樣做之後,它確實有效。所以我想問爲什麼,我不能在複製構造函數中重用複製分配代碼?C++:複製構造函數中的調用拷貝賦值
-1
A
回答
0
假設您在複製構造函數中使用了複製賦值運算符。然後,你失去了實施的賦值操作符copy-and-swap成語的能力:
struct A
{
A (const A &a)
{
*this = a; // Assignment to a not yet constructed object is not well
}
A &operator=(A a) // Pass by value
{
// ...
}
};
A a1, a2;
a1 = a2; // Infinite recursion!
這是不可能的,並會出現無限遞歸。
+1
謝謝,我認爲它很有用。如果參數是通過值傳遞的,它會導致無限遞歸,並且不適合分配給不是構造對象。對不起,我沒有足夠的聲望投票。 – lingjieyu
0
構造函數創建一個新對象;賦值運算符修改現有對象。你不能使用賦值操作符來創建一個新對象:即使它看起來可以在簡單情況下工作,它也不知道如何去做。
相關問題
- 1. 拷貝賦值爲未實現的拷貝構造函數
- 2. C++隱含的拷貝構造函數和賦值操作符
- 3. C++拷貝構造函數/賦值運算錯誤
- 4. C++中的拷貝構造函數
- 5. C++複製構造函數和賦值
- 6. 一個拷貝構造函數調用
- 7. 拷貝構造函數不被調用?
- 8. C++ 11右值引用調用拷貝構造函數也
- 9. C++中的隱式定義的拷貝構造函數是否也爲成員調用拷貝構造函數?
- 10. 通用C#拷貝構造函數
- 11. C++中拷貝構造函數
- 12. 的拷貝構造函數
- 13. 只實現拷貝構造函數,沒有賦值構造函數
- 14. C++數組複製與拷貝構造函數
- 15. Java的拷貝構造函數不是複製值
- 16. 隱式拷貝構造函數/賦值運算符的行爲
- 17. 基類的拷貝構造函數(C++)
- 18. C++默認的拷貝構造函數
- 19. 拷貝構造函數
- 20. 拷貝構造函數knowlege
- 21. 拷貝構造函數++
- 22. 調用C++中的拷貝構造函數
- 23. C++模板複製構造函數深拷貝
- 24. 拷貝構造函數和賦值運算符執行選擇 -
- 25. 拷貝構造函數/賦值運算符
- 26. 拷貝構造函數和賦值運算符
- 27. 拷貝構造函數和賦值操作符
- 28. 拷貝構造函數+賦值操作符
- 29. 初始化,拷貝構造函數和賦值
- 30. 默認拷貝構造函數和拷貝賦值賦值運算符給奇怪的錯誤
我認爲這是因爲可能更有效的成員初始化通過在初始化程序列表中直接複製它們。 –
我有一種感覺,這在「Effective C++」的第12項中有很好的解釋。 – juanchopanza
希望所有的答案都會或多或少地解釋斯科特在那裏解釋過的東西_Item 12_ – P0W