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) 的呼叫是未指定的。 如果嘗試成功,則函式會傳回指標配置儲存區。 如果不是,函式會呼叫指定的 新的處理常式。。 如果呼叫的函式會傳回,重複迴圈。 迴圈會終止,當嘗試配置要求的儲存體是成功的或,便會呼叫的函式無法傳回時。
新的處理常式所需的行為是執行下列其中一項作業:
進行配置的更多儲存可用則傳回。
呼叫 abort 和 exit(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