【发布时间】:2014-03-03 17:33:25
【问题描述】:
考虑存在一些std::vector<ClassA>然后有另一个类的对象包含指向该向量元素的指针的情况,例如:
ClassB Object(&ClassA[12]);
这是一个雷区,以防矢量被调整大小等?我应该改用std::vector<ClassA *> 吗?
【问题讨论】:
-
确实,当你对向量进行变异时,对向量元素的引用通常会失效。
-
@KerrekSB 谢谢。我是否正确地认为指针向量将是前进的方向?
-
@mga 我会考虑重写
ClassB。原始指针从来都不是一个好主意。 -
@mga:使用boost::stable_vector,或者如果你拒绝使用boost,那么
std::list<T>或std::vector<std::unique_ptr<T>>,是的。 -
@mga 指针向量确实减轻了您对对象内存地址不变的直接担忧,但它只会打开另一个蠕虫罐,您必须小心删除向量中的每个元素在删除它们之前(假设它们是动态分配的)。更好的解决方案可能是
vector<unique_ptr<ClassA>>,甚至是list<ClassA>。
标签: c++ pointers stl stdvector