我需要在類中實現重載的賦值運算符,因此vector.erase
函數將按照「vector::erase with pointer member」的答案中的建議正常工作。爲了相同的目的,我也實現了一個拷貝構造函數。通過以下操作符的實現,我得到以下警告:重載的賦值運算符會導致有關遞歸的警告
'Player :: operator =':在所有控制路徑上遞歸,函數將導致運行時堆棧溢出。
顯然Player::operator=
的執行不正確。什麼是正確的實施?
//Copy constructor:
Player::Player(const Player& otherPlayer) {
...
}
Player& Player::operator=(const Player& rhs) {
*this = Player(rhs);
return *this;
}
multimap的擦除功能是否與向量一樣工作?當我在multimap中使用時,我沒有收到有關不執行重載operator=
的錯誤,因爲它與矢量一樣。真相是什麼?
此外,玩家可以參考銀行作爲會員。我是否應該僅通過=來完成參考的分配?那麼複製構造函數的目的是什麼?
我編輯了我的答案,讓我知道如果沒關係! – Tom 2011-12-26 11:11:10
關於更新:您幾乎從不擁有參考成員。理想情況下,只有其唯一目的是管理單個非託管資源的類應具有用戶定義的析構函數,複製構造函數和複製賦值運算符。 你可以嘗試描述你的實際課堂設計嗎?從中我們可以嘗試推斷出更好的實現。 – Philipp 2011-12-26 11:16:54
這個帖子有太多的問題。 SO使用Q&A格式。不同的問題應該單獨發佈。關於如何在賦值運算符和拷貝構造函數中處理引用成員的問題應該是一個單獨的問題(儘管首先要進行搜索以確保它之前沒有被問到)。 – outis 2011-12-26 11:33:14