Поделиться через


новый оператор (CRT)

Выберите блок памяти из кучи

void *__cdecl operator new[](
   size_t count
);
void *__cdecl operator new[] (
   size_t count, 
   void * object
) throw();
void *__cdecl operator new[] (
   size_t count, 
   const std::nothrow_t&
) throw();

Параметры

  • Счетчик
    Размер выделения.

  • object
    Указатель на блок памяти, в течение которого объект будет создан.

Возвращаемое значение

Указатель к меньшему адрес повторно выделенного байта.

Заметки

Эта форма operator new как вектор новый, в отличие от скалярных свойств (новой формыоператор new).

Первая форма данного оператора, как форма nonplacement.Второй формой этого оператора, как форма размещения и третья форма данного оператора nonthrowing форма размещения.

Первая форма оператора определяется компилятором и не требует new.h включать в программе.

удаление операторов [] освобождает память, выделенную с помощью оператора new.

Можно настроить ли operator new[] возвращает значение null или создает исключение при сбое.См. Новые и удаление операторов для получения дополнительных сведений.

За исключением создание или никак-бросая расширения функциональности, CRT operator new ведет себя следующим образом новый оператор [] в стандартной библиотеке C++.

Требования

Процедура

Обязательный заголовок

new[]

<new.h>

Дополнительные сведения о совместимости см. Совместимость во введении.

Библиотеки

Все версии Библиотеки времени выполнения C.

Пример

В следующем примере показано использование вектор, форму nonplacement operator new.

// crt_new4.cpp
#include <stdio.h>
int main() {
   int * k = new int[10];
   k[0] = 21;
   printf("%d\n", k[0]);
   delete [] k;
}

В следующем примере показано использование вектор, форма размещения operator new.

// crt_new5.cpp
#include <stdio.h>
#include <new.h>
int main() {
   int * i = new int[10];
   i[0] = 21;
   printf("%d\n", i[0]);
   // initialize existing memory (i) with, in this case, int[[10]
   int * j = new(i) int[10];   // placement vector new
   printf("%d\n", j[0]);
   j[0] = 22;
   printf("%d\n", i[0]);
   delete [] i;   // or, could have deleted [] j 
}

В следующем примере показано использование вектор, размещение, форму никак-хода operator new.

// crt_new6.cpp
#include <stdio.h>
#include <new.h>
int main() {
   int * k = new(std::nothrow) int[10];
   k[0] = 21;
   printf("%d\n", k[0]);
   delete [] k;
}

См. также

Ссылки

Выделение памяти