C++ 均衡对象时复制数组

C++ 均衡对象时复制数组,c++,arrays,pointers,object,operators,C++,Arrays,Pointers,Object,Operators,大家好。我在这里需要一些关于如何处理带有对象的动态数组的经验 我有一个类“SA”,由几个对象“Obj1”、“Obj2”等组成 在类中,我有一个动态数组“SA_array”,我用以下方式初始化它,其中size设置其长度: double * SA_Array; SA_Array = new double [size]; 现在,我一直在尝试对上述对象使用“=”操作符来复制每个对象中的数组。不幸的是,我意识到它只会均衡指针,因此,如果我修改一个对象中的数组,所有对象的sau数组都会被修改为相同的。。。

大家好。我在这里需要一些关于如何处理带有对象的动态数组的经验

我有一个类“SA”,由几个对象“Obj1”、“Obj2”等组成

在类中,我有一个动态数组“SA_array”,我用以下方式初始化它,其中size设置其长度:

double * SA_Array;
SA_Array = new double [size];
现在,我一直在尝试对上述对象使用“=”操作符来复制每个对象中的数组。不幸的是,我意识到它只会均衡指针,因此,如果我修改一个对象中的数组,所有对象的sau数组都会被修改为相同的。。。实际上,阵列上只剩下一个副本

e、 g.Obj1.SA_数组==Obj2.SA_数组


对于如何克服这一问题并获得特定于对象的SA_阵列副本,有什么好的建议吗?

如果大小是在运行时确定的,最容易使用的是向量

vector<double> SA_Array(size);
您可以像使用数组一样使用它,但也可以复制它并像使用向量那样执行
sau array.begin()
。如果需要指向起始点的指针,可以使用
SA_Array.data()
&SA_Array[0]
执行此操作

有一种方法可以像您一样使用原始指针,并手动复制它

double *SA_Array;
SA_Array = new double[size];

double *SA_Copy;
SA_Copy = new double[size];
std::copy(SA_Array, SA_Array + size, SA_Copy);

但是这很麻烦,因为您需要记住删除[]它们,而向量将为您完成所有工作。

使用标准库集合,例如
std::vector
,或者,在需要原始数组的罕见情况下,您可以编写副本构造函数,注意确保异常安全

double *SA_Array;
SA_Array = new double[size];

double *SA_Copy;
SA_Copy = new double[size];
std::copy(SA_Array, SA_Array + size, SA_Copy);