我遇到了一个奇怪的问题。我正在尝试为我的类编写一个复制构造函数,它包含一个整数和一个指针向量,指向同一个类的其他对象。
class A {
private:
int id;
std::vector<A*> relatedObjects;
}
在main函数中,我使用默认构造函数创建了A类的对象。然后另外两个动态分配的A对象
A master;
A* slave1 = new A;
A* slave2 = new A;
然后我使用一个公共函数将两个从属对象添加到向量中,该函数只是将指针推送到向量。
addSlave(A* slave) {
this->relatedObjects.push_back(slave);
}
现在我遇到的问题是当我想从main函数制作master的副本时。在尝试复制指针向量时,我遇到了段错误。我试图做一个浅拷贝,因为我希望新对象引用相同的从属对象,而不是一个孤立的副本。我的拷贝构造函数如下:
A::A(const A& orig) {
this->id = orig.id;
this->relatedObjects = orig.relatedObjects;
}
我也试过迭代迭代复制指针的向量,但这仍然导致相同的段错误。根据关于向量的文档,“=”运算符“将向量x的副本指定为向量对象的新内容”,在这种情况下意味着将指针复制到新的向量对象。这就是我想要的。
我不确定为什么我会遇到这个问题,我确信这就是seg故障背后的原因,因为当向量副本被注释掉时,seg故障消失了。如果有人可以帮忙解决这个问题,我将非常感激。
谢谢。