при копировании объектов проблема со статически объявленным массивом, который является членом объекта-члена копируемого объекта - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть вектор объектов А.класс A содержит объект-член типа B. класс 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 Ответ

2 голосов
/ 20 февраля 2011

Вам не нужно определять конструктор копирования, чтобы сделать это. Я не уверен, что вы имеете в виду под "статическими массивами", поскольку есть два значения, но ни один из них не требует конструктора копирования.

Если вы имеете в виду «массив статического размера», например:

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

Тогда конструктор копирования по умолчанию будет делать для каждого элемента копирование элементов из копируемого объекта.

Если вы имеете в виду «статический массив bools», например:

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

Тогда конструктор копирования не будет касаться этого массива, потому что он является общим для всех экземпляров класса.

Если ваш массив bool s поврежден, у вас может быть ошибка повреждения памяти, возможно, из-за чтения конца массива или разыменования неверного указателя. Я бы посмотрел на это, поскольку поведение копирования по умолчанию действительно даст вам то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...