Ok, situation:
I am using a library that I have no control over, which has a method createSomeObject().
This method returns a pointer to an abstract base class with pure virtual functions, and it has no copy constructor so I can’t instantiate it myself nor copy it (obviously).
I need to store some number (let’s say 10) of these in a vector, so I tried to do the following:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
v.push_back(library->createSomeObject());
}
As soon as this loop is over, the vector is filled with broken pointers.
I have tried the following:
vector<AbstractBaseClass*> v(10);
for(int i = 0; i < 10; i++)
{
AbstractBaseClass* abc = library->createSomeObject();
v.push_back(abc);
}
To no avail. I must be going crazy or doing something seriously wrong here. I’ve looked around but the answer is always use boost::shared_ptr. A great solution possibly, but I can’t guarantee that it’ll be on the machines that this will be built on, so I’d like to avoid packaging Boost with the code.
Is there something I’m missing? I feel as though I’m just forgetting some simple thing, as I can’t think of a reason one of these wouldn’t work.
When you do this:
you’re already creating a vector which contains 10 (NULL) pointers. So after you’ve called
push_back, you’ll have a vector with 20 pointers, out of which the first 10 are invalid.If you know the size beforehand:
or, alternitively, call
reserveafter creating an empty vector.