我的+运算符改变了我的类的值

时间:2013-08-15 17:58:49

标签: c++ operator-overloading

 const Polynomial operator +(const Polynomial lhs, const Polynomial rhs){
        //lhs is 1
        Polynomial result(lhs);

        result+=rhs;
        //when I add rhs to my result it also increments my lhs and lhs is now 3
        cout<<"item: "<<rhs<<endl;
        return result;
    }

        int size;
    Monomial *polynome; // my polynome is an array of monomials
                            //p[0]= 2, p[1]=3x etc.

我正在使用默认的复制构造函数(我没有定义一个)也许这就是问题,因为我有一个指向数组的指针,我不知道。 我宁愿不分享我的+ =运算符unles必要,因为它似乎工作得很好,但它的实施非常糟糕,需要30分钟来解释最新情况。  这让我疯狂,任何解决方案?

编辑:定义深层复制构造函数解决了我的问题。非常感谢您的提示!

1 个答案:

答案 0 :(得分:0)

我会冒险猜测你的班级看起来像这样模糊:

// DO NOT write code like this. The default copy semantics are incorrect.
struct Polynomial {
    Polynomial(size_t order) : coefs(new double[order+1]) {}
    double * coefs;
};

尝试使用哑指针管理动态内存。除非您编写自己的复制构造函数和赋值运算符以正确复制动态数组,否则复制它只会复制指针,使两者都指向同一个数组。

最简单的解决方案是使用标准的vector容器,它具有您期望的复制语义:

// Better: the default copy semantics correctly copy the vector
struct Polynomial {
    Polynomial(size_t order) : coefs(order+1) {}
    std::vector<double> coefs;
};