#cpp
Здравствуйте! У меня возник простой вопрос чисто академического характера. Допустим, где-то в коде происходит создание динамического массива: int *pi = new int[3]; Каким из трех способов обнулять динамический массив наиболее корректно/наиболее некорректно? delete pi; delete [] pi; delete [3] pi;
Ответы
Ответ 1
Первый удаляет указатель, а не массив. Второй удаляет массив. Ну а по поводу третьего, в С++ вроде не нужно указывать размер массива. Так что правильно удалить ваш динамический массив можно вторым способом. А лучше найди доку по этому вопросу там будет всё подробно расписано. Там вроде как если удаляешь со скобками то будут вызваны деструкторы если массив объектов.Ответ 2
Про третий способ первый раз слышу. Первые два для встроенных типов одинаковы. Точнее, стандартом это тоже не определено, но здравый смысл подсказывает, что по-другому быть и не может. Для классов, естественно UB. Кстати, Боресков в своей книге "Расширения OpenGL" удаляет массив char для хранения пикселей изображения через delete, а не через delete[].
Комментариев нет:
Отправить комментарий