C++存储基类指针的向量
C++ vector storing base class pointers
好的,情况:我正在使用一个我无法控制的库,它有一个方法 createSomeObject()。此方法返回指向具有纯虚函数的抽象基类的指针,并且它没有复制构造函数,因此我无法自己实例化它,也无法复制它(显然)。
我需要在一个向量中存储一些(假设 10 个),所以我尝试执行以下操作:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v.push_back(library->createSomeObject());
}
一旦这个循环结束,向量就会被损坏的指针填充。
我尝试了以下方法:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
AbstractBaseClass* abc = library->createSomeObject();
v.push_back(abc);
}
无济于事。 我一定是疯了,或者在这里做了什么严重的错误。 我环顾四周,但答案总是使用 boost::shared_ptr。 可能是一个很好的解决方案,但我不能保证它会在构建它的机器上,所以我想避免将 Boost 与代码打包在一起。
我错过了什么吗? 我觉得我只是忘记了一些简单的事情,因为我想不出其中一个不起作用的原因。
当你这样做时:
vector<AbstractBaseClass*> v(10);
您已经在创建一个包含 10 个 (NULL) 指针的向量。因此,在你调用 push_back
之后,你将得到一个包含 20 个指针的向量,其中前 10 个指针无效。
如果您事先知道尺寸:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v[i] = library->createSomeObject();
}
或者,或者,在创建空向量后调用reserve
。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化