Tengo una colección de objetos polimórficos, todos derivados de mi clase Animal: Gato, Perro y Pez Monkey.¿Cuándo debería usar un vector de objetos en lugar de un vector de punteros?
Mi modo de funcionamiento habitual es almacenar estos objetos en un vector de punteros de animales, de este modo:
std :: vector < Animal *> my_vector;
my_vector.push_back(new Animal_Cat()); my_vector.push_back(new Animal_Dog()); my_vector.push_back(new Animal_MonkeyFish());
Y la vida es genial ... ¿o sí?
Recientemente me han dicho que realmente debería tratar de evitar asignar memoria de esta manera, porque hace que la gestión de la memoria sea una tarea difícil. Cuando necesito destruir mi_vector, tengo que recorrer todos los elementos y borrar todo.
No creo que pueda almacenar un vector de referencias (podría estar equivocado al respecto), así que parece que el almacenamiento de un vector de objetos animales es mi única alternativa.
¿Cuándo debo elegir utilizar un vector de punteros contra un vector de objetos? En general, ¿qué método es preferible? (Me gustaría reducir la copia de objetos tanto como sea posible.)
Los punteros inteligentes Boost lo convirtieron en un informe técnico, por lo que puede tener std :: tr1 :: shared_ptr <>. VC++ 9 en VS 2008 lo hace. –
como referencia el C++ 0x unique_pte, que es prácticamente un reemplazo de auto_ptr, funcionará en contenedores debido a las referencias rvalue y la semántica de movimiento –