均衡对象时复制数组

时间:2009-03-16 12:45:44

标签: c++ arrays pointers object operators

向大家致以问候。我需要一些实验来解决如何使用Objects处理动态数组。

我有一个'SA'类,由几个对象'Obj1','Obj2'等组成......

在类中我有一个动态数组'SA_Array',我按照以下方式初始化,其中size设置其长度:

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

现在我一直在尝试在上面的对象上使用'='运算符来复制每个对象中的数组。不幸的是,我意识到它只是均衡了指针,因此如果我在一个对象中修改数组,所有对象SA_Array的修改都是相同的...基本上只留下我在数组上的一个副本。

e.g。 Obj1.SA_Array == Obj2.SA_Array ......

关于如何克服这个问题并获得SA_Array的特定对象副本,是否有任何好的建议?

2 个答案:

答案 0 :(得分:3)

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

vector<double> SA_Array(size);

现在你可以复制,交换,调整它,它会相应地采取行动。如果需要指向begin的指针,可以使用&SA_Array[0]执行此操作。如果在编译时确定并修复了大小,则可以使用boost :: array

boost::array<double, size> SA_Array;

您可以像使用数组一样使用它,但也可以复制它并像向量一样执行SA_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);

但这很麻烦,因为你需要记住它们delete[],它们会为你做一切。

答案 1 :(得分:0)

使用标准库集合,例如std::vector<double>,或者在极少数情况下需要使用原始数组,您可以编写复制构造函数,注意确保异常安全。