關于賦值運算重載是否正確的問題?
#include?"Dollar.h" Dollar?&?Dollar::operator?+?(const?Dollar?&?doll) { ????Dollar?dollarRes; ????int?c?=?doll.cent?+?cent; ????dollarRes.cent?=?c?%?100; ????int?d?=?doll.dollar?+?dollar; ????dollarRes.dollar?=?d?+?c?/?100; ????return?dollarRes; }
@Redknot,老師, 這個賦值運算符重載內部創建的是一個棧變量,最后將這個棧變量的引用返回了,但是棧變量會隨著函數的結束而銷毀,那返回的這個對象引用是不是有問題?這樣寫是對的嗎?
2024-03-12
是的,這樣你返回了一個臨時變量的引用也就是地址值給到外界,這樣外部其實還能操控你這個地址,但是地址指向的數據已經被銷毀了。一般來說,返回引用或者是常引用通常是返回類的私有成員變量,用于提供外部接口,特別的例如Get函數,const Data& Class::GetData() const { return m_data; };這種情況以常引用的方式返回了一個Data變量,同時函數為常函數。