-1
 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.

我正在使用默认的复制构造函数(我没有定义一个)也许这就是问题所在,因为我有一个指向我不知道的数组的指针。除非有必要,否则我宁愿不分享我的 += 运算符,因为它看起来工作正常,但实施得非常糟糕,需要 30 分钟来解释发生了什么。这让我发疯,有什么解决办法吗?

编辑:定义一个深拷贝构造函数解决了我的问题。非常感谢您的提示!

4

1 回答 1

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;
};

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

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

// Better: the default copy semantics correctly copy the vector
struct Polynomial {
    Polynomial(size_t order) : coefs(order+1) {}
    std::vector<double> coefs;
};
于 2013-08-15T18:23:17.237 回答