-1

我有一个 A 对象的向量。A 类包含 B 类型的成员对象。B 类包含一个静态声明的 bool 数组。当我将 A 对象复制到向量中时,布尔数组中的值会丢失。我认为这应该不是问题,因为 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;
}
4

1 回答 1

2

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

如果您的意思是“静态大小的数组”,如下所示:

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

然后,默认的复制构造函数将对被复制对象中的元素进行成员复制。

如果你的意思是“一个静态的布尔数组”,像这样:

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

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

如果您的bools 数组被损坏,您可能会遇到内存损坏错误,可能是通过读取数组的末尾或取消引用错误的指针。我会调查一下,因为默认的复制行为确实会给你你想要的。

于 2011-02-20T10:22:12.717 回答