簡単な質問が 2 つあります。単純に、割り当てまたは中止ルーチンCを頻繁に使用します。xmallocC++で実装しました。これは正しい例外のない実装ですか?
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スローされなくても例外をスローする可能性のあるバージョンを使用する場合、オーバーヘッドはありませんか? 絶対に必要でない場合は、例外を使用したくありません。