operator 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
    指向创建对象的内存块的指针。

返回值

指向新分配内存的最小字节地址的指针。

备注

与新矢量窗体 (的new[] 运算符) 对比之下,operator new 的窗体称为新标量。

此运算符的第一形式被称为 nonplacement 形式。 此运算符的第二个窗体称为放置窗体,并且此运算符第三个窗体是未抛出的放置窗体。

运算符的第一个形式由编译器定义的,并且不需要在程序中包含 new.h。

删除运算符 释放使用 operator new分配的内存。

可以配置失败时返回new运算符或抛出异常。 请参见 有关更多new和delete运算符信息

在抛出异常或未抛出操作下,CRToperator new 行为类似于在标准 C++ 库中的 operator new

要求

例程

必需的标头

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。有关更多信息,请参见平台调用示例

请参见

参考

内存分配