У меня странная проблема. Я пытаюсь написать конструктор копирования для моего класса, который содержит целое число и вектор указателей, которые указывают на другие объекты того же класса.
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 в качестве нового содержимого для векторного объекта», в этом случае означает копирование указателей на новый векторный объект. Это то, что я хочу.
Я не уверен, почему у меня возникает эта проблема, и я уверен, что это является причиной ошибки сегмента, поскольку, когда векторная копия закомментирована, ошибка сегмента исчезает. Если бы кто-нибудь мог помочь с этим, я был бы очень благодарен.
Спасибо.