У меня есть коллекция полиморфных объектов, все из моего класса Animal: Cat, Dog и MonkeyFish.Когда я должен использовать вектор объектов вместо вектора указателей?
Мой обычный режим работы, чтобы сохранить эти объекты в векторе животных указателей, например, так:
станд :: вектор < животных *> my_vector;
my_vector.push_back(new Animal_Cat()); my_vector.push_back(new Animal_Dog()); my_vector.push_back(new Animal_MonkeyFish());
И жизнь велика ... или не так ли?
Мне недавно сказали, что я действительно должен стараться не выделять память таким образом, потому что это делает управление памятью сложной задачей. Когда мне нужно уничтожить my_vector, я должен выполнить итерацию по всем элементам и удалить все.
Я не думаю, что могу хранить вектор ссылок (возможно, я ошибаюсь), так что сохранение вектора объектов Animal является моей единственной альтернативой.
Когда я должен использовать вектор указателей против вектора объектов? В общем, какой способ является предпочтительным? (Я хотел бы как можно больше уменьшить копирование объектов.)
Ускоренные указатели Boost превратили его в технический отчет, поэтому у вас может быть std :: tr1 :: shared_ptr <>. VC++ 9 в VS 2008. –
для справки C++ 0x unique_pte, который в значительной степени заменяет auto_ptr, будет работать в контейнерах из-за ссылок rvalue и семантики перемещения –