对于我自己创建的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;
答案 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++;
}
}