我有一个A对象的向量。类A包含类型B的成员对象.class B包含静态声明的bool数组。当我将A对象复制到向量中时,bool数组中的值将丢失。我虽然这应该不是问题,因为bool数组是静态声明的。我需要使用复制构造函数来处理它吗?
class B
{
public:
bool theArray[5] ;
B(bool x) {theArray[1] = x;};
B(){};
};
class A
{
public:
B obj_B;
A() : obj_B(1) {};
A(A const &origin) : obj_B(origin.obj_B){};
};
int main ()
{
std::vector <A> someAs;
for(int q=0;q<10;q++)
someAs.push_back(A());
for(int q=0;q<10;q++)
std::cout << someAs[q].obj_B.theArray[1] << std::endl;
}
答案 0 :(得分:2)
您不需要定义复制构造函数来执行此操作。我不确定“静态数组”是什么意思,因为它有两个含义,但都不需要复制构造函数。
如果你的意思是“数组是静态大小的”,就像这样:
class MyClass {
private:
bool myArray[137];
};
然后,默认的复制构造函数将从正在复制的对象中执行元素的成员复制。
如果你的意思是“一个静态的bool阵列”,就像这样:
class MyClass {
private:
static bool myArray[137];
};
然后复制构造函数不会触及此数组,因为它在类的所有实例中共享。
如果你的bool
数组被破坏,你的手上可能会有内存损坏错误,可能是通过读取数组的末尾或取消引用错误的指针。我会研究一下,因为默认的复制行为确实会给你你想要的东西。