复制构造函数不起作用并导致内存泄漏

时间:2015-11-11 06:14:20

标签: c++ memory-leaks dynamic-arrays

对于我自己创建的Vector类:

class Vector
{
private:
    double* elem;
    int n;

public:
    Vector();
    Vector(const int s);
    Vector(Vector&);
    ~Vector();

    void print();

    void set(const int, const double);
    double get(const int) const;
    int size() const;
    double norm() const;
    Vector add(const Vector&) const;
    Vector subtract(const Vector&) const;
    double scalar(const Vector&) const;

};

当我尝试调用复制构造函数时:

Vector::Vector(Vector& x)
{
int count = 0;
n = x.n;
elem = new double[n];
while (count < n)
    {
    elem[n] = x.elem[n];
    count++;
    }
}

它复制地址而不是向量的元素。有没有人知道为什么会这样?

P.S。我在析构函数中写过

delete []elem;

2 个答案:

答案 0 :(得分:1)

因为

Vector(Vector&);

它不是复制构造函数的签名。正确的签名将是

Vector(const Vector&);

编译器没有看到用户定义的复制构造函数,并默默地生成它自己的默认复制构造函数,它只复制

double* elem;
int n;

并不关心分配新内存和复制数组元素。

答案 1 :(得分:-1)

Vector::Vector(Vector& x)
{
int count = 0;
n = x.n;
elem = new double[n];
while (count < n)
    {
    elem[n] = x.elem[n];//here should be:elem[count] = x.elem[count]
    count++;
    }
}