Мое понимание:
A
- vector<B*>
- vector<C*>
B
- vector<C*>
Изнутри B вы удаляете все C *.
Вам необходимо удалить каждый адрес памяти отдельно, но не более одного раза.
Любой указатель на удаленный адрес все еще содержит тот же адрес, он просто вызывает неопределенное поведение, если вы его используете.
Поэтому не следует повторно удалять B * из A, который вы уже удалили, и не использовать их после того, как они будут удалены.
Возможно, вы захотите пересмотреть свою иерархию / дизайн.
Или рассмотрите возможность использования boost :: shared_ptr , если вам нужно хранить вещи таким способом. Фактически каждый раз, когда вы храните коллекцию указателей, вы, вероятно, должны использовать boost :: shared_ptr. Если вы используете boost :: shared_ptr, вы не удаляете его, и вам не нужно беспокоиться об аннулировании других указателей.