2011-11-19 79 views
1

我有以下程序片段:拷貝構造函數和賦值操作符都得到所謂

Polynomial Polynomial:: add(const Polynomial b) 
{ 
    Polynomial c; 
    c.setRoot(internalAdd(root, c.root)); 
    c.setRoot(internalAdd(b.root, c.root)); 
    return c; 
} 

c = (a.add(b)); 

我的理解,這個代碼是想增加A和B一起,然後通過調用分配所產生的多項式到c複製構造函數。

然而,當我真正測試,

  • C調用拷貝構造函數馬上並試圖複製B,
  • 然後A和B添加
  • 則c試圖獲得最終多項式通過賦值運算符
  • ,則程序崩潰

我能做些什麼來解決這個問題?

+0

您將需要向我們展示覆制構造函數和賦值運算符以檢測崩潰的原因。順便說一句,你看到的行爲或多或少可以解釋查詢命名返回值優化(NRVO)。 –

+0

運營商關鍵字標籤?你想寫'Polynomial :: operator +(const Polynomial&rhs)const'嗎? – Johnsyweb

回答

6
Polynomial Polynomial::add(const Polynomial& b) 
             ^

如果您不想將參數複製,請將其作爲參考傳入。

這可能不會解決您的崩潰 - 沒有辦法告訴是什麼原因導致沒有更多的代碼(和一些調試在你身邊查明它),但它會消除需要複製構造多項式論據。

相關問題