new operator (STL Samples)
new 演算子 in <new> を使用する方法について説明します。
void *operator new(
size_t n
)
void *operator new(
size_t n,
const nothrow&
)
void *operator new[](
size_t n
);
解説
[!メモ]
プロトタイプのクラスやパラメーター名はヘッダー ファイルのバージョンと一致しない。ただし読みやすさが向上するように変更されました。
新規作成 の最初の演算子はメモリを試してできるように失敗すると例外がスローされます。 新規作成 2 番目の演算子は型が nothrow の 2 番目のパラメーターを受け取ります。このパラメーターは割り当てが失敗した場合null 値を返し例外をスローしないことを示します。 新規作成 の 3 番目の演算子はこの型の配列のメモリの割り当てと失敗すると例外がスローされます。
使用例
// newop.cpp
// compile with: /EHsc
//
// Functions:
// void *operator new(size_t n)
// void *operator new(size_t n, const nothrow&)
// void *operator new[](size_t n);
#include <new>
#include <iostream>
using namespace std;
class BigClass {
public:
BigClass() {};
~BigClass(){}
#ifdef _WIN64
double BigArray[0x0fffffff];
#else
double BigArray[0x0fffffff];
#endif
};
int main() {
try {
BigClass * p = new BigClass;
}
catch( bad_alloc a) {
const char * temp = a.what();
cout << temp << endl;
cout << "Threw a bad_alloc exception" << endl;
}
BigClass * q = new(nothrow) BigClass;
if ( q == NULL )
cout << "Returned a NULL pointer" << endl;
try {
BigClass * r[3] = {new BigClass, new BigClass, new BigClass};
}
catch( bad_alloc a) {
const char * temp = a.what();
cout << temp << endl;
cout << "Threw a bad_alloc exception" << endl;
}
}
出力例
bad allocation
Threw a bad_alloc exception
Returned a NULL pointer
bad allocation
Threw a bad_alloc exception
必要条件
ヘッダー : <new>