簡単な質問が 2 つあります。単純に、割り当てまたは中止ルーチンC
を頻繁に使用します。xmalloc
C++で実装しました。これは正しい例外のない実装ですか?
template <typename T>
T *xnew(const size_t n)
{
T *p = new (std::nothrow) T[n];
if (p == nullptr)
{
cerr << "Not enough memory\n";
abort();
}
return p;
}
int main()
{
int *p = xnew<int>(5000000000LL);
}
<int>
2 番目の質問です。呼び出しからを削除するxnew<int>(5000000000LL);
と、コンパイラ (g++ 4.7.2)は、戻り値の型がまだ残っているにもかかわらず、それを推論できなくなります。何故ですか?[T = int]
int *
編集:new
スローされなくても例外をスローする可能性のあるバージョンを使用する場合、オーバーヘッドはありませんか? 絶対に必要でない場合は、例外を使用したくありません。