close

函數的回傳值使用上要非常的小心,雖然程式寫久了,這算是比較基礎的概念,但有時一疏忽,往往就會造成系統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 物件而有可能同時需要多個這樣的物件。
arrow
arrow
    全站熱搜

    cloudfly 發表在 痞客邦 留言(0) 人氣()