复制构造函数和赋值操作符都被调用
Copy constructor and assignment operator both get called
我有以下程序片段:
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)
^
如果你不希望参数被复制,就像上面那样作为引用传递。
这可能不会修复您的崩溃—没有更多的代码(以及您这边的一些调试来查明它),没有办法告诉是什么导致的,但它将消除复制构造多项式参数的需要。
相关文章:
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 为什么deque::erase()调用赋值运算符
- C++ 不调用赋值运算符
- 通过调用Move赋值操作符实现Move构造函数
- 如何从复制赋值操作符调用复制构造函数
- 即使类没有定义构造函数,也不能在类上调用c++默认的move赋值操作符
- 复制构造函数和赋值操作符都被调用
- 可以在move赋值操作符中调用析构函数吗?
- 在c++中使用赋值操作符而不是调用函数
- 赋值操作符重载未被调用
- Visual c++ 2010 / QT:为什么要调用类的赋值操作符
- 为什么赋值操作符用于深度复制,谁调用它
- 如果在调用时没有取赋值操作符的返回类型,将会发生什么?
- 在重载赋值操作符内调用构造函数
- 退出重载赋值操作符将调用析构函数来删除对象
- C++从重载的复制赋值运算符中调用默认的复制赋值操作符
- 在赋值操作符中调用复制构造函数
- 当我从赋值操作符返回值时,首先,调用复制构造函数的机制和基础是什么?
- c++赋值操作符=不调用rhs上的析构函数