C++ 复制构造函数和赋值运算符都会被调用
我有以下程序片段:C++ 复制构造函数和赋值运算符都会被调用,c++,constructor,copy,variable-assignment,operator-keyword,C++,Constructor,Copy,Variable Assignment,Operator Keyword,我有以下程序片段: 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 然而,当我实际测试它
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尝试通过赋值运算符得到结果多项式
- 然后程序崩溃了
Polynomial Polynomial::add(const Polynomial& b)
^
如果不希望复制参数,请如上所述将其作为引用传入
这可能无法修复您的崩溃-如果没有更多的代码(以及您方面的一些调试来确定它),就无法判断是什么导致了崩溃,但它将消除复制构造多项式参数的需要
如果不希望复制参数,请如上所述将其作为引用传入
这可能无法修复您的崩溃-如果没有更多的代码(以及您方面的一些调试来确定它),无法判断是什么导致了崩溃,但它将消除复制构造多项式参数的需要。您需要向我们展示复制构造函数和赋值运算符,以检测崩溃的原因。顺便说一句,您看到的行为或多或少是可解释的查找,名为返回值优化(NRVO)?您是否正在尝试编写
多项式::运算符+(const polyman&rhs)const
?您需要向我们展示复制构造函数和赋值运算符,以检测崩溃的原因。顺便说一句,您看到的行为或多或少是可解释的查找,名为返回值优化(NRVO)?您正在尝试编写多项式::运算符+(常数多项式&rhs)常数?