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