оператор new (n) против нового unsigned char [n] для размещения new

Я выделяю память, которая позже будет использоваться для построения объектов с размещением new, Должен ли я использовать operator new(n)или я должен использовать new unsigned char[n]? Зачем?

8

Решение

Факторы:

  • new[] должны соответствовать delete[] / new() с delete
  • Oни общаться разные вещи. operator new(n) это запрос памяти для неопределенных целей, тогда как new unsigned char[n] слабо подразумевает намерение хранить символы там.

Форма массива может быть немного худшая производительность / эффективность — точные детали в зависимости от вашей реализации:

5.3.4 / 12 new T [5] приводит к вызову оператора new, где x — неотрицательное неопределенное значение, представляющее издержки выделения массива: результат new-expression будет смещен на эту величину из значения, возвращенного operator new[]….

Кстати, ни то, ни другое не инициализировано:

  • operator new() возвращает void* для неинициализированной памяти: см. 3.7.4.1/2 «Нет ограничений на содержимое выделенного хранилища при возврате из функции выделения», тогда как в 5.3.4 / 15 говорится «новое выражение, которое создает объект типа T, инициализирует этот объект следующим образом: если новый инициализатор опущен, объект инициализируется по умолчанию (8.5) «; 8.5 / 6 говорит, что только конструкторы типов классов по умолчанию обеспечивают инициализацию.
7

Другие решения

Первый возвращает указатель на некоторую область памяти. Последний возвращает указатель на первый элемент массива с некоторыми объекты в этом. Если вам нужно хранилище, используйте тот, который дает хранилище, а не объекты.

5

По вопросам рекламы [email protected]