Perché foo è un un puntatore non oggetto.
std::vector<my_obj*> // This is an object
std::vector<my_obj*> * // This is a pointer to an object
^^^ // Notice the extra star.
Nuova rerturns un puntatore:
new std::vector<my_obj*>(); // returns std::vector<my_obj*> *
PS. Probabilmente il vettore dovrebbe contenere oggetti e non puntatori.
std::vector<my_obj> foo;
...
foo.push_back(my_obj());
altrimenti sarà necessario eliminare manualmente tutti gli oggetti nel vettore quando passa nell'ambito (qualora l'oggetto contenente viene distrutto). Ad esempio, se vuoi mantenere i puntatori nel tuo vettore, devi eseguire una delle seguenti azioni:
// 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
fonte
2011-12-28 19:00:17
Cosa hanno detto. Inoltre, non posso raccomandare 'foo.push_back (new my_obj());' perché dove hai intenzione di liberare la memoria lì? –