函數的回傳值使用上要非常的小心,雖然程式寫久了,這算是比較基礎的概念,但有時一疏忽,往往就會造成系統Crash,簡單來說,函式產生新物件的路徑有二,在Stack空間或是在Heap空間裡,以底下例子來說。
const Rational& operator* (const Rational& lhs,
const Rational& lhs)
{
Rational result(lhs.n * rhs.n, lhs.d* rhs.d)
return result;
}
此函式傳回一個指向local的物件,此物件在函式退出前就被銷毀了,若再針對此物件做處理,就會發生不可預期之錯誤。
◎結論
絕不要傳回pointer或reference指向一個local stack物件,或傳回reference指向一個heap-allocated物件,或傳回pointer或reference指向一個local static 物件而有可能同時需要多個這樣的物件。
文章標籤
全站熱搜
