Потому что foo — это объект, а не указатель.
std::vector<my_obj*> // This is an object
std::vector<my_obj*> * // This is a pointer to an object
^^^ // Notice the extra star.
new
возвращает указатель:
new std::vector<my_obj*>(); // returns std::vector<my_obj*> *
PS. Ваш вектор, вероятно, должен содержать объекты, а не указатели.
std::vector<my_obj> foo;
...
foo.push_back(my_obj());
В противном случае вам нужно будет вручную удалить все объекты в векторе, когда он выйдет за пределы области видимости (когда содержащий его объект будет уничтожен). То есть, если вы хотите сохранить указатели в своем векторе, вы должны сделать одно из следующих действий:
// 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
person
Martin York
schedule
28.12.2011
foo.push_back(new my_obj());
ибо где вы там память освобождать собираетесь? - person Mr Lister   schedule 28.12.2011