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) 的调用未指定的。 如果尝试失败的情况,函数返回指向分配的存储区。 否则,调用指定的函数 新的处理程序。 如果调用的函数返回,则循环重复。 循环终止,当尝试分配请求存储成功,或者当调用的函数不返回。

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

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

  • 调用 abort退出将 (int)。

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

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

后续调用并且几乎分配的存储顺序为 operator new(size_t)。未指定的一样,存储的初始值的位置。

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

默认行为是返回 operator new(_Count),如果该函数已经成功。 否则,它返回空指针。

第三个函数是将 new 表达式,窗体的 new (argsT) 调用。 此处,args 包括单个对象指针。 这可用于构造对象。已知的地址。 函数返回 _Ptr

operator new分配的未使用助记域,调用 删除运算符

有关引发的 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

要求

新 <的页眉: >

命名空间: std

请参见

参考

new 运算符(STL 示例)

nothrow_t 结构

operator delete (<new>)