Страницы

Поиск по вопросам

суббота, 1 февраля 2020 г.

Правильное удаление указателей

#cpp


Здравствуйте!
У меня возник простой вопрос чисто академического характера. Допустим, где-то в коде
происходит создание динамического массива:
 int *pi = new int[3];

Каким из трех способов обнулять динамический массив наиболее корректно/наиболее некорректно?

delete pi;
delete [] pi;
delete [3] pi;
    


Ответы

Ответ 1



Первый удаляет указатель, а не массив. Второй удаляет массив. Ну а по поводу третьего, в С++ вроде не нужно указывать размер массива. Так что правильно удалить ваш динамический массив можно вторым способом. А лучше найди доку по этому вопросу там будет всё подробно расписано. Там вроде как если удаляешь со скобками то будут вызваны деструкторы если массив объектов.

Ответ 2



Про третий способ первый раз слышу. Первые два для встроенных типов одинаковы. Точнее, стандартом это тоже не определено, но здравый смысл подсказывает, что по-другому быть и не может. Для классов, естественно UB. Кстати, Боресков в своей книге "Расширения OpenGL" удаляет массив char для хранения пикселей изображения через delete, а не через delete[].

Комментариев нет:

Отправить комментарий