operator new (<new>)
オブジェクトの配列のストレージを割り当てるために新しい式で呼び出される割り当て関数。
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 を割り当てるには、小さい呼び出されます。プログラムは、標準 C++ ライブラリで定義されている既定のバージョンを置き換えるこの関数のシグネチャと関数を定義できます。必須の動作は 新しい演算子size_t () の場合と同じです。既定の動作では、operator new_Count () を返します。
2 番目の関数は、配置の new[] 式によってそのサイズの配列オブジェクトを表すように適切に配置される _Count ストレージのバイトを割り当てるために呼び出されます。プログラムは、標準 C++ ライブラリで定義されている既定のバージョンを置き換えるこの関数のシグネチャと関数を定義できます。既定では、関数が成功した場合 operatornew_Count () を返します。それ以外の場合は null ポインターを返します。
3 番目の関数は、フォーム new (args) の配置 new[] 式によって、T[入力]N呼び出されます。ここでは、引数は 一つのオブジェクト ポインターで構成されます。関数は _Ptrを返します。
**operator new[]**で割り当てられるストレージの呼び出し operator delete [入力]。
新しいをスローするか、nonthrowing 動作の詳細については、新しい演算子と delete 演算子を参照してください。
使用例
// 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