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

C++ C++;向量存储基类指针,c++,pointers,stl,vector,C++,Pointers,Stl,Vector,好,情况: 我正在使用一个我无法控制的库,它有一个createSomeObject()方法。 这个方法返回一个指向带有纯虚函数的抽象基类的指针,并且它没有复制构造函数,所以我不能自己实例化它,也不能复制它(显然) 我需要在一个向量中存储其中的一些数字(比如10),因此我尝试执行以下操作: vector<AbstractBaseClass*> v(10); for(int i = 0; i < 10; i++) { v.push_back(library->cre

好,情况: 我正在使用一个我无法控制的库,它有一个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);
}
向量v(10); 对于(int i=0;i<10;i++) { v、 向后推(库->createSomeObject()); } 循环一结束,向量中就充满了断开的指针

我尝试了以下方法:

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);
}
向量v(10); 对于(int i=0;i<10;i++) { AbstractBaseClass*abc=library->createSomeObject(); v、 推回(abc); } 无济于事。我一定是疯了,或者是做错了什么。我环顾四周,但答案总是使用boost::shared\u ptr。这可能是一个很好的解决方案,但我不能保证它会出现在构建它的机器上,所以我希望避免使用代码打包Boost

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

当你这样做时:

vector<AbstractBaseClass*> v(10);

或者,在创建一个空向量后,另一种方法是调用
reserve

噢,该死,我害怕这个:我是弱智。将在计时器关闭时接受。>10个(悬空)指针。。。你为什么叫他们吊儿郎当?这是10个空指针。@KirillKobelev我认为它们没有初始化为空。是吗?@KirillKobelev:)MSV往往很怪异。我并不是说它们不是,但一个标准引用可以作为证据,而不是一个编译器的行为