operator new (<new>)

由新表达式调用的函数,以分配各个对象的存储。

void* operator new(
   std::size_t _Count
) throw(bad_alloc);
void* operator new(
   std::size_t _Count,        
   const std::nothrow_t&
) throw( );
void* operator new(
   std::size_t _Count, 
   void* _Ptr
) throw( );

参数

  • _Count
    要分配存储字节数。

  • _Ptr
    要返回的指针。

返回值

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

备注

第一个函数由一个新的表达式调用分配存储正确对齐的 _Count 字节表示该范围所有对象。 程序可以定义与替换标准C++库定义的默认版本和的此函数签名的替代函数,因此可替换的。

才存储可分配按请求,所需的行为是返回具有非null指针。 每个这样的分配提供指向存储从其他分配存储的相交。 顺序工作流和关闭分配存储的调用顺序是未指定的。 则最初存储的值是未指定的。 返回的指针指向开始(最低的字节地址)分配的存储。 如果计数为零时,返回的值与函数返回的其他值不相等。

默认行为是执行循环。 在循环内部,该函数首先尝试分配请求的存储。 在尝试是需要对 malloc(size_t)的调用是未指定的。 如果在尝试成功,该函数返回指向由分配的存储。 否则,函数调用指定的 新的处理程序。 如果调用函数返回,循环。 循环终止,当尝试分配请求的存储成功,或在一个调用函数不返回时。

新的处理程序所需的行为是执行以下操作之一:

  • 使更多存储可用于分发然后返回。

  • 调用 abortexit(int)。

  • 引发类型 **bad_alloc.**对象

新的处理程序 的默认行为是引发类型 bad_alloc对象。 null指针指定为默认新的处理程序。

顺序工作流和关闭分配存储的顺序调用 operator new(size_t)是未指定的,如存储的初始值存在。

第二个函数按位置新调用的表达式分配存储正确对齐的 _Count 字节表示该范围所有对象。 程序可以定义与替换标准C++库定义的默认版本和的此函数签名的替代函数,因此可替换的。

默认行为是返回 operator new(_Count),则该功能成功。 否则,它将返回null指针。

第三个函数通过位置 新建 表达式,窗体中调用 新建 (参数) T。 此处,参数 由一个对象指针。 这可用于构造对象在已知的地址。 函数返回 _Ptr

operator new分配的未使用记忆字段,请调用 delete运算符

有关引发的或nonthrowing的行为新信息,请参见 新建和删除运算符

示例

// new_op_new.cpp
// compile with: /EHsc
#include<new>
#include<iostream>

using namespace std;

class MyClass 
{
public: 
   MyClass( )
   {
      cout << "Construction MyClass." << this << endl;
   };

   ~MyClass( )
   {
      imember = 0; cout << "Destructing MyClass." << this << endl;
   };
   int imember;
};

int main( ) 
{
   // The first form of new delete
   MyClass* fPtr = new MyClass;
   delete fPtr;

   // The second form of new delete
   MyClass* fPtr2 = new( nothrow ) MyClass;
   delete fPtr2;

   // The third form of new delete
   char x[sizeof( MyClass )];
   MyClass* fPtr3 = new( &x[0] ) MyClass;
   fPtr3 -> ~MyClass();
   cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
}

示例输出

Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.000B3F30
Destructing MyClass.000B3F30
Construction MyClass.0023FC60
Destructing MyClass.0023FC60
The address of x[0] is : 0023FC60

要求

标头: <new>

命名空间: std

请参见

参考

new operator (STL Samples)

nothrow_t Structure

operator delete (<new>)