存储基类指针的C ++向量

时间:2012-08-10 03:42:23

标签: c++ pointers stl vector

好的,情况: 我正在使用一个我无法控制的库,它有一个方法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。

有什么我想念的吗?我觉得好像忘记了一些简单的事情,因为我无法想到其中一个不起作用的原因。

1 个答案:

答案 0 :(得分:10)

执行此操作时:

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