operator new[] (<new>)
新的運算式呼叫的配置函式配置陣列儲存物件 (Storage Object)。
void *operator new[](
std::size_t _Count
)
throw(std::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.
備註
第一個函式。 new[] 運算式稱為配置儲存區適當最好是對齊的 _Count 個位元組表示該大小所有陣列物件或更小。 程式可以定義與取代 Standard C++ 程式庫中定義的預設版本之這個函式簽章的函式。 必要的行為與相同 new 運算子(size_t)。 預設行為是傳回 operator new(_Count)。
第二個函式會將 new[] 運算式稱為配置儲存區適當最好是對齊的 _Count 個位元組表示該大小所有陣列物件。 程式可以定義與取代 Standard C++ 程式庫中定義的預設版本之這個函式簽章的函式。 預設行為是傳回 operatornew(_Count),如果該函式成功。 否則,會傳回 null 指標。
第三個函式會將 new[] 運算式,表單會呼叫 new (長度) TN[]。 在此例中, 引數 包含單一物件的指標。 函式會傳回 _Ptr。
為 **operator new[]**配置中未使用的記憶體區域,呼叫 運算子 delete []。
如需擲回的或 nonthrowing 行為的新資訊,請參閱 新增和刪除運算子。
範例
// new_op_alloc.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[2];
delete[ ] fPtr;
// The second form of new delete
char x[2 * sizeof( MyClass ) + sizeof(int)];
MyClass* fPtr2 = new( &x[0] ) MyClass[2];
fPtr2[1].~MyClass();
fPtr2[0].~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
// The third form of new delete
MyClass* fPtr3 = new( nothrow ) MyClass[2];
delete[ ] fPtr3;
}
範例輸出
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
需求
標題: <new>
命名空間: std