在這個簡化的例子中,我的問題是:我是否在Action :: setUser()內部進行合法賦值?此C++參考分配是否正確?
class User {
private:
int age;
public:
int getAge() { return age; }
};
class Action {
private:
User user;
public:
void setUser(User &u) {
user = u;
}
};
int main() {
User u;
Action a;
a.setUser(u);
return 0;
}
是什麼讓我噪音,
- 時SETUSER被稱爲發生了什麼行動的 「用戶」 屬性?它被摧毀了嗎?它有史以來建造?
- 如果我第二次調用setUser會發生什麼?
- 如果我刪除setUser中的「&」符號,一切都會好的,對不對?因爲這就像傳遞參數的副本一樣,對吧?
我很擔心,我做內存瘋狂的事情,因爲屬性沒有被正確地摧毀...
謝謝
編輯於星期一2013年2月18日
非常感謝!我真的很感激你的迴應......
我不知道編譯器提供了一個默認的重載賦值操作符。現在我知道一切都非常有意義...
再次感謝。
除了可能更好,如果這是'const User&u',那麼分配就很好。它將複製用戶而不需要中間副本到by-val參數。 Action的現有用戶不會被銷燬'setUser(u)',而是會通過賦值操作符「覆蓋」。如果你想要,你可以通過自己編寫一個'User :: operator =(const User&u)'來控制它是如何完成的。關於第二個電話,與第一個電話相同。最後,刪除&*將會*引入至少一個額外的副本。 – WhozCraig 2013-02-17 00:47:01
我想知道你寫的最後一句話:*「我擔心我在記憶中做了瘋狂的事情,因爲屬性沒有被正確銷燬」* - 你是什麼意思?*「被正確銷燬」*?你如何看待這個問題? – LihO 2013-02-17 00:53:32