Ситуация:
class A { ... };
class B : public A { ... };
std::vector BunchOfObjects;
BunchOfObjects.push_back(new B);
Главное - не забыть уничтожить удаляемые из контейнера объекты. И если делать это через оператор delete - еще про виртуальный деструктор у базового класса не забыть бы.
Хотя... другое классическое решение позволяет обойтись и без первого и без второго:
std::vector > BunchOfObjects;
BunchOfObjects.push_back(boost::shared_ptr(new B));
Наличие виртуального деструктора в таком случае не принципиально - shared_ptr запоминает как нужно удалять объект, по умолчанию это будет оператор delete для нужного типа.
BTW, при наличии виртуального деструктора, если уж связались с boost, и shared_ptr'ы используются только в этом контейнере, логичнее использовать boost::ptr_container.
Комментариев нет:
Отправить комментарий