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

235
16 января 2018, 13:14

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

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

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

Answer 1

Никто не мешает писать new T[n], где n == 1.

Однако само по себе использование new T[n] и new T считается дурным тоном, т.к. есть std::vector<T> и std::make_unique<T>.

В частности С++ 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.

Answer 2

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

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

READ ALSO
double to string

double to string

min достаточно маленькое - 222507e-308 (заметье, это не отрицательное число, а чучуть больше нуля)

286
минимальное значение double в string

минимальное значение double в string

как преобразовать минимальное значение double в формате fixed в string

251
Как отключить предупреждение &ldquo;multiple definition of symbol&rdquo;

Как отключить предупреждение “multiple definition of symbol”

Изучаю работу редактора связей и специально для этого написал программу, в которой два раза появляется один и тот же символХочу посмотреть...

347