2011-11-19 42 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) 
             ^

如果您不想将参数复制,请将其作为参考传入。

这可能不会解决您的崩溃 - 没有办法告诉是什么原因导致没有更多的代码(和一些调试在你身边查明它),但它会消除需要复制构造多项式论据。

相关问题