Posiadam kolekcję polimorficznych obiektów, wszystkie pochodzą z mojej klasy Zwierząt: Kot, Pies i MonkeyFish.Kiedy należy używać wektora obiektów zamiast wektora wskaźników?
Mój zwykły tryb pracy jest do przechowywania tych przedmiotów w wektorze wskaźniki Animal, tak:
std :: vector < Zwierząt *> my_vector;
my_vector.push_back(new Animal_Cat()); my_vector.push_back(new Animal_Dog()); my_vector.push_back(new Animal_MonkeyFish());
A życie jest wspaniałe ... czy to prawda?
Niedawno powiedziano mi, że powinienem naprawdę starać się unikać przydzielania pamięci w ten sposób, ponieważ to sprawia, że zarządzanie pamięcią jest uciążliwe. Kiedy muszę zniszczyć my_vector, muszę przerobić wszystkie elementy i usunąć wszystko.
Nie sądzę, że mogę przechowywać wektor referencji (może się mylę), więc wydaje mi się, że przechowywanie wektora obiektów Zwierzęcych jest moją jedyną alternatywą.
Kiedy należy wybrać wektor wskaźników w porównaniu do wektora obiektów? Ogólnie, która metoda jest lepsza? (Chciałbym ograniczyć kopiowanie obiektów w największym możliwym stopniu.)
The Boost smart pointers wprowadził go do raportu technicznego, więc możesz mieć std :: tr1 :: shared_ptr <>. VC++ 9 w VS 2008 ma. –
dla odniesienia C++ 0x unique_pte, które jest prawie zamiennikiem dla auto_ptr, będzie działało w kontenerach z powodu odniesień rvalue i poruszania semantyką –