因爲foo是一個不是指針的對象。
std::vector<my_obj*> // This is an object
std::vector<my_obj*> * // This is a pointer to an object
^^^ // Notice the extra star.
新rerturns指針:
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
他們說的。另外,我不推薦'foo.push_back(new my_obj());'因爲你要在那裏釋放內存? – 2011-12-28 19:05:28