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


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

Параметры

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

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

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

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

Заметки

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

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

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

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

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

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

Требования

Процедура

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

new;

<new.h>

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

Библиотеки

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

Пример

В следующем примере показано использование скаляр, форму nonplacement 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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

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