Что вы подразумеваете под «динамически распределять» точно?Если вы используете vector<foo>
, то все в порядке.Если вы помещаете указатели через vector<foo*>
, то деструкторы не будут вызываться, потому что указатели сами по себе не имеют деструкторов.
Обратите внимание, однако, что в случае vector<foo>
вы можете найтиКонструкторы и деструкторы вызывали намного больше, чем вы ожидаете, например, когда вектор изменен, потому что вектор будет использовать их при перемещении объектов в памяти, если это необходимо.Вы можете использовать Boost shared_ptr
, чтобы обойти это, хотя из-за небольшой подсчётов счетов ведется небольшая стоимость.
Мой совет: используйте vector<foo>
, если объекты дешевы для копирования и уничтоженияи vector<shared_ptr<foo> >
, если они дорогие или их трудно / невозможно скопировать.Никогда не используйте vector<foo*>
, если вы не хотите, чтобы вектор управлял памятью, и только тогда будьте осторожны;ИМХО это редко хорошая идея.