Sub*_*evn 2 c++ pointers stl vector
好的,情况:我使用的是一个我无法控制的库,它有一个方法createSomeObject().这个方法返回一个指向具有纯虚函数的抽象基类的指针,它没有复制构造函数,所以我不能自己实例化它,也不能复制它(显然).
我需要在向量中存储一些数字(比如说10个),所以我尝试执行以下操作:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v.push_back(library->createSomeObject());
}
Run Code Online (Sandbox Code Playgroud)
一旦这个循环结束,向量就会被破碎的指针填充.
我尝试过以下方法:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
AbstractBaseClass* abc = library->createSomeObject();
v.push_back(abc);
}
Run Code Online (Sandbox Code Playgroud)
无济于事.我必须疯狂或在这里做一些严重的错误.我环顾四周,但答案总是使用boost :: shared_ptr.可能是一个很好的解决方案,但是我不能保证它将会在这些将被构建的机器上,所以我想避免使用代码包装Boost.
有什么我想念的吗?我觉得好像忘记一些简单的事情,因为我无法想到其中一个不起作用的原因.
Luc*_*ore 10
当你这样做:
vector<AbstractBaseClass*> v(10);
Run Code Online (Sandbox Code Playgroud)
你已经在创建一个包含10个(NULL)指针的向量.因此,在你打电话之后push_back,你将拥有一个有20个指针的向量,其中前10个指针无效.
如果您事先知道尺寸:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v[i] = library->createSomeObject();
}
Run Code Online (Sandbox Code Playgroud)
或者,可选地,reserve在创建空向量之后调用.
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |