两个简单的问题:简单地说,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);
}
Run Code Online (Sandbox Code Playgroud)
第二个问题,如果我<int>从xnew<int>(5000000000LL);调用中删除,编译器(g ++ 4.7.2)不能再推断,[T = int]尽管返回类型int *仍然存在.这是为什么?
编辑:使用new可能抛出异常的版本是否有任何开销,即使它没有被抛出?当我不是绝对必要的时候,我真的不想使用任何例外.
我不明白为什么这是必要的.
如果无法分配内存,new则会抛出 std::bad_alloc如果您不处理异常,这将导致调用std::terminate有效地结束程序并具有与之相同的行为xmalloc.
当然,当编译器没有实现异常时,这会发生变化.
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |