Страницы

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

среда, 5 февраля 2020 г.

Использование “new []” вместо “new” в С++

#cpp #память


Можно ли использовать new [] вместо new? К примеру:

int main()
{
    int q = 1;
    int *mass = new int [q];
    ...
    delete [] mass;
}


Спрашиваю потому, что хочется сделать код более универсальным, чтобы каждый раз не
делать проверки на значения переменной q, где она может быть больше единицы или равной ей.
Будет ли такой код корректно функционировать? И не будет ли такой стиль считаться
дурным тоном?
    


Ответы

Ответ 1



Такой способ создания одиночных объектов непригоден в случаях, когда необходимо полиморфное удаление полиморфных объектов. Полиморфное удаление возможно только через new/delete, но не через new[]/delete[]. Также такой способ создания одиночных объектов приведет к повышенному расходу памяти в случаях, когда объект имеет нетривиальный деструктор.

Ответ 2



Никто не мешает писать new T[n], где n == 1. Однако само по себе использование new T[n] и new T считается дурным тоном, т.к. есть std::vector и std::make_unique. В частности С++ Core Guidelines не рекомендуют использование "naked new": ES.60: Avoid new and delete outside resource management functions Reason Direct resource management in application code is error-prone and tedious.

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

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