我想为我的类制作复制构造函数,它有一个 double 组作为私有(private)成员\ 我如何编写复制构造函数我已经尝试了以下代码但它导致错误
class My_class
{
private:
double dp [500];
public:
My_class(const My_class & c1)
{
//error the following line why i cant use arrayname as a pointer?
dp =new double[500];
for(int i=0;i<500;i++)
*(dp+i)=c1.dp[i];
}
}
我怎样才能使这个复制构造函数工作?
最佳答案
dp =new double[500];
该代码是多余且错误的。因为您已经有一个成员 dp
作为 double 组。
删除该行,您的构造函数应该可以工作:
for(int i=0;i<500;++i)
*(dp+i)=c1.dp[i];
但这也是多余的。因为您的类有一个数组成员(不是指针),所以默认的复制构造函数将为您完成所有工作(即成员复制)。
通常,当你有一个指针成员时,你只需要担心复制构造函数(和复制赋值等)——在这种情况下,默认(编译器生成的)复制构造函数会执行所谓的浅拷贝,这是不正确的,因此您必须创建自己的深层拷贝,或者使用称为移动操作的东西更好。
关于c++ - 使用复制构造函数复制 double 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59016899/