假设我有这个:
SolutionSet(const SolutionSet &solutionSet) {
this->capacity_ = solutionSet.capacity_;
this->solutionsList_ = solutionSet.solutionsList_; // <--
}
而solutionsList_
是vector<SomeType*> vect*
。复制该向量的正确方法是什么(我想这样做我做得不对......)?
答案 0 :(得分:0)
您现在所做的是解决方案列表的“浅层复制” - 原始向量包含对解决方案的引用列表,复制的向量将包含对相同解决方案的引用。这可能就是你在这里所需要的。
如果不是,并且您确实需要深层复制,即您希望在创建第二个解决方案集时重复每个解决方案,则需要确保您的SomeType具有明确定义的复制构造函数,然后手动遍历新向量中的所有项目并进行复制:
for (int i = 0; i < solutionsList.size(); i++)
solutionsList[i] = new SomeType(solutionsList[i]);
或使用指针容器,如已经建议的那样(虽然可能是一种过度杀伤)。
答案 1 :(得分:0)
vector<SomeType*> vect*
。复制该载体的正确方法是什么[...]?
正确的方法是不要动态分配对象的哑指针。使它成为一个智能指针,这一切变得更加容易。