Стандартный контейнер указателей никогда не удалит цель из любых указателей, которые он содержит.Он не может знать, что они указывают на объекты, созданные с помощью new
- они могли бы быть созданы с помощью new[]
(в этом случае требуется delete[]
), или они могут быть указателями на статические или автоматические объекты, которые должныне может быть удалено, или может быть что-то еще, ответственное за их удаление.
Обычно, вы будете хранить объекты в контейнере, а не в указателях.Если вам действительно нужны указатели (возможно, потому что объекты должны быть разных типов), и вам действительно нужны эти указатели для управления временем жизни объекта, рассмотрите возможность использования умного указателя, такого как std::unique_ptr
, который автоматически удаляет его цель, или boost::ptr_vector
если это недоступно.
В противном случае, если вы действительно должны использовать необработанные указатели для управления временем жизни объекта, вам нужно быть осторожным, чтобы использовать delete
самостоятельно в нужное время.В этом случае такой инструмент, как Valgrind , может помочь выявить неизбежные утечки памяти.