共用方式為


operator new (<new>)

new-expression 配置個別物件存放區時呼叫的函式。

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 位元組大小表示所有物件。 程式可以定義與取代 Standard C++ 程式庫所定義的預設版本和此函式簽章的替代函式,因此為可取代。

只有在儲存體中配置按照需求,必要的行為是傳回非 null 指標。 每個設定產生指標從其他配置儲存區的存放不相交。 儲存體配置命令和執行屬性由後續呼叫的是未指定的。 初始儲存值尚未指定。 對啟動 (最低的位元組的位址) 傳回的指標點配置儲存區。 如果 count 為零,則傳回的值與函式傳回的其他值比較起來並不相等。

預設行為是執行迴圈。 在迴圈中,函式先嘗試配置要求的儲存區。 嘗試是否需要 malloc(size_t) 的呼叫是未指定的。 如果嘗試成功,則函式會傳回指標配置儲存區。 如果不是,函式會呼叫指定的 新的處理常式。。 如果呼叫的函式會傳回,重複迴圈。 迴圈會終止,當嘗試配置要求的儲存體是成功的或,便會呼叫的函式無法傳回時。

新的處理常式所需的行為是執行下列其中一項作業:

  • 進行配置的更多儲存可用則傳回。

  • 呼叫 abortexit(int)。

  • 擲回型別 **bad_alloc.**物件

新的處理常式。 的預設行為會擲回型別 bad_alloc的物件。 null 指標指定預設新處理常式。

儲存體配置命令和執行屬性由後續呼叫對 operator new(size_t) 是未指定的,要儲存的原始值存在。

第二個函式會將新的運算式呼叫配置儲存體一些物件地對齊的 _Count 位元組大小表示所有物件。 程式可以定義與取代 Standard C++ 程式庫所定義的預設版本和此函式簽章的替代函式,因此為可取代。

預設行為是傳回 operator new(_Count),則該函式成功。 否則,會傳回 null 指標。

第三個函式由放置 new 運算式,表單呼叫 new Type(args) T。 在此例中, 引數 包含單一物件指標。 這可用於建構物件在已知位址。 函式傳回 _Ptr

operator new配置空間閒置儲存,呼叫 運算子刪除

如需擲回的或 nonthrowing 行為的新資訊,請參閱 new 和 delete 運算子

範例

// 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>)