两个简单的问题:简而言之,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>
从xnew<int>(5000000000LL);
调用中删除,编译器(g++ 4.7.2)不能再推断出[T = int]
,尽管返回类型int *
仍然存在。这是为什么?
编辑:new
使用即使没有抛出异常也可能抛出异常的版本是否有任何开销?当不是绝对必要时,我真的不想使用任何例外。