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


оператор new (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();

Параметры

  • count
    Размер выделяемой памяти.

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

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

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

Заметки

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

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

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

оператор delete освобождает память, выделенную operator new.

Можно настроить, возвращает ли оператор new значение NULL или создает исключение при сбое. Дополнительные сведения см. в разделе Операторы new и delete.

За исключением возможности разрешить или запретить генерацию исключений, CRT operator new работает подобно оператору new в стандартной библиотеке C++.

Требования

Подпрограмма

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

new

<new.h>

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

Библиотеки

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

Пример

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

// crt_new1.cpp
#include <stdio.h>
int main() {
   int * i = new int(6);
   printf("%d\n", *i);
   delete i;
}

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

// crt_new2.cpp
#include <stdio.h>
#include <new.h>
int main() {
   int * i = new int(12);
   printf("*i = %d\n", *i);
   // initialize existing memory (i) with, in this case, int(7)
   int * j = new(i) int(7);   // placement new
   printf("*j = %d\n", *j);
   printf("*i = %d\n", *i);
   delete i;   // or, could have deleted j
}

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

// crt_new3.cpp
#include <stdio.h>
#include <new.h>
int main() {
   // allocates memory, initialize (8) and if call fails, new returns null
   int * k = new(std::nothrow) int(8);   // placement new
   printf("%d\n", *k);
   delete k;
}

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

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