Поскольку вы создаете вектор «голых» указателей, C ++ не может знать, что эти указатели предназначены для «владения» объектами, на которые они указывают, и поэтому не будут вызывать эти объекты ». деструкторы, когда указатель уходит. Вы должны использовать простой «умный» указатель вместо «пустого» указателя в качестве элемента vector
. Например, Boost's shared_ptr будет вполне достаточно для этой задачи (хотя вы, несомненно, можете сделать это с «более дешевыми», более легкими подходами, если вы не хотите иметь дело с Boost в целом и имеете больше нет необходимости в умных указателях в вашем коде).
Редактировать : поскольку вы (ОП) говорите, что использование такой инфраструктуры, как Boost, невозможно, и пара комментариев полезно указывают на то, что даже упаковка std::auto_ptr
не делает ' Чтобы это действительно можно было назвать достойным ярлыком, вам, возможно, придется реализовать собственные умные указатели (или, если вы обнаружите, что автономный класс шаблонов умных указателей с открытым исходным кодом выглядит удобным, проверьте его на соответствие вашим требованиям). Эта статья - полезный учебник для интеллектуальных указателей в C ++, независимо от того, нужно ли вам самостоятельно развернуть или проверить существующую реализацию.