使用复制构造函数复制双精度数组
copying array of double using copy constructor
我想为我的类制作复制构造函数,该类具有双精度数组作为私有成员\ 如何编写复制构造函数,我尝试过以下代码,但会导致错误
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
作为双精度数组。
删除该行,您的构造函数应该可以工作:
for(int i=0;i<500;++i)
*(dp+i)=c1.dp[i];
但这也是多余的。因为你的类有一个数组成员(不是指针(,所以默认的复制构造函数将为你完成所有工作(即成员复制(。
通常,当您拥有指针成员时,您只需要担心复制构造函数(和复制赋值等( - 在这种情况下,默认(编译器生成的(复制构造函数将执行不正确的所谓浅拷贝,因此您必须创建自己的深拷贝,或者更好地使用称为移动操作的东西。
虽然你不需要一个,因为编译器生成的编译器在这种情况下是完全可以的,但如果需要,你可以为此使用memmove
或std::copy
。
double array[500];
double dest[500];
std::copy(begin(array), end(array), begin(dest));
::memmove(dest, array, sizeof(double)*500);
您将 dp 数组声明为成员变量,因此无需使用 new 运算符分配其内存,只需直接使用数组即可
My_class(const My_class & c1)
{
//error the following line why i cant use arrayname as a pointer?
//dp =new double[500]; << no need to do this
for(int i=0;i<500;i++)
dp[i]=c1.dp[i];
}
相关文章:
- 在数组中使用C++中的哈希表复制数组中的元素
- 快速复制数组到阵列
- 如何在C 中复制数组
- 赋值运算符复制数组中除可用空间之外的所有内容
- 尝试复制数组时从 DLL 调用函数时程序崩溃
- 反向复制数组
- 复制数组 - 将数组加倍后崩溃
- 复制数组和气泡排序 C++
- 在结构中复制构造函数:是否复制数组
- 如何从类中复制数组并将新数组的大小加倍
- 在C++中复制数组的麻烦
- 逐行复制数组的内容
- tictactoe和复制数组
- 正在使用数组的名称strring复制数组
- c++复制数组到数组
- . net互操作是来回复制数组数据,还是固定数组?
- 从通过函数发送的结构体中复制数组
- 使用CUDA Thrust置换迭代器复制数组的特定元素
- C/ c++中有复制数组的函数吗?
- 在引用中复制数组