Копия вектора указателей дает ошибку сегмента. (C ++) - PullRequest
1 голос
/ 18 марта 2012

У меня странная проблема. Я пытаюсь написать конструктор копирования для моего класса, который содержит целое число и вектор указателей, которые указывают на другие объекты того же класса.

class A {

    private:
        int id;
        std::vector<A*> relatedObjects;
}

В основной функции я создаю объект класса A, используя конструктор по умолчанию. А затем еще два объекта A выделяются динамически

A master;
A* slave1 = new A;
A* slave2 = new A;

Затем я добавляю два подчиненных объекта в вектор, используя публичную функцию, которая просто помещает указатели на вектор.

addSlave(A* slave) {

    this->relatedObjects.push_back(slave);
}

Теперь проблема, которая у меня возникает, - это когда я хочу сделать копию мастера из основной функции. Я получаю segfault при попытке скопировать вектор указателей. Я пытаюсь сделать поверхностную копию, потому что я хочу, чтобы новый объект ссылался на те же подчиненные объекты, а не на изолированную копию. Мой конструктор копирования выглядит следующим образом:

A::A(const A& orig) {

    this->id = orig.id;
    this->relatedObjects = orig.relatedObjects;
}

Я также пытался перебирать вектор, копируя указатели один за другим, но это все равно приводит к тому же самому ошибке. Согласно документации по векторам, оператор «=» «назначает копию вектора x в качестве нового содержимого для векторного объекта», в этом случае означает копирование указателей на новый векторный объект. Это то, что я хочу.

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

Спасибо.

...