Porque foo es un objeto, no un puntero.
std::vector<my_obj*> // This is an object
std::vector<my_obj*> * // This is a pointer to an object
^^^ // Notice the extra star.
Nueva rerturns un puntero:
new std::vector<my_obj*>(); // returns std::vector<my_obj*> *
PS. Tu vector probablemente debería contener objetos, no punteros.
std::vector<my_obj> foo;
...
foo.push_back(my_obj());
lo contrario, tendrá que eliminar manualmente todos los objetos en el vector cuando se sale del ámbito (cuando el objeto que contiene es destruido). es decir, si desea mantener los punteros en su vector, debe hacer una de las siguientes acciones:
// 1. Manually delete all the elements in the vector when the object is destroyed.
~bar::bar()
{
for(std::vector<my_obj*>::iterator loop = foo.begin(); loop != foo.end(); ++loop)
{
delete (*loop);
}
}
// 2. Use a smart pointer:
std::vector<std::shared_ptr<my_obj> > foo;
// 3. Use a smart container for pointers
boost::ptr_vector<my_obj> foo
Lo que ellos dijeron. Además, no puedo recomendar 'foo.push_back (new my_obj());' porque ¿dónde vas a liberar la memoria allí? –