關(guān)于賦值運算重載是否正確的問題?
#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,老師, 這個賦值運算符重載內(nèi)部創(chuàng)建的是一個棧變量,最后將這個棧變量的引用返回了,但是棧變量會隨著函數(shù)的結(jié)束而銷毀,那返回的這個對象引用是不是有問題?這樣寫是對的嗎?
2024-03-12
是的,這樣你返回了一個臨時變量的引用也就是地址值給到外界,這樣外部其實還能操控你這個地址,但是地址指向的數(shù)據(jù)已經(jīng)被銷毀了。一般來說,返回引用或者是常引用通常是返回類的私有成員變量,用于提供外部接口,特別的例如Get函數(shù),const Data& Class::GetData() const { return m_data; };這種情況以常引用的方式返回了一個Data變量,同時函數(shù)為常函數(shù)。