复制对象时,问题是静态声明的数组,它是被复制对象的成员对象的成员

时间:2011-02-20 10:17:30

标签: c++ arrays object copying

我有一个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;
}

1 个答案:

答案 0 :(得分:2)

您不需要定义复制构造函数来执行此操作。我不确定“静态数组”是什么意思,因为它有两个含义,但都不需要复制构造函数。

如果你的意思是“数组是静态大小的”,就像这样:

class MyClass {
private:
    bool myArray[137];
};

然后,默认的复制构造函数将从正在复制的对象中执行元素的成员复制。

如果你的意思是“一个静态的bool阵列”,就像这样:

class MyClass {
private:
    static bool myArray[137];
};

然后复制构造函数不会触及此数组,因为它在类的所有实例中共享。

如果你的bool数组被破坏,你的手上可能会有内存损坏错误,可能是通过读取数组的末尾或取消引用错误的指针。我会研究一下,因为默认的复制行为确实会给你你想要的东西。