Предположим, что все myObjectInstance
являются указателями на кучу выделенных объектов (если не так, см. Ответ @ JoãoPaulo), и никакие пользовательские new
или delete
не задействованы.
for (size_t idx = 0; idx < someSize; ++idx)
delete myArr[idx];
delete[] myArr;
Какая потенциальная ловушка?
Ну, их много.Что если инициализируются только некоторые элементы массива?Другой будет в неопределенном состоянии, и удаление их приводит к неопределенному поведению.
Кроме того, что, если несколько элементов массива указывают на один и тот же объект?Затем вы пытаетесь удалить объект несколько раз.Это также приводит к неопределенному поведению.
Это не значит, что вы не можете использовать этот наивный метод, оно просто напоминает вам некоторые предварительные условия:
- Убедитесь, что каждый элемент массиваинициализируется либо «указателем на некоторый выделенный объект кучи», либо
nullptr
(удаление nullptr
безопасно). - Убедитесь, что вы не удаляете объект дважды.