当前位置: 代码迷 >> 综合 >> nothrow new
  详细解决方案

nothrow new

热度:67   发布时间:2024-01-14 08:12:59.0
new 异常

当我们设置set new_handler函数的时候,new 失败就会转调用 我们设置的 handler函数,但是如果没有设置就会抛出 bad_alloc异常。这个时候如果没有catch 这异常程序就会退出,所以正确的new 的使用方式如下

template <class T>
T* Alloc()
{try {T* tmp = new T();} catch(std::bad_alloc& e) {cerr << e.what() ;tmp = NULL;}return tmp;
}    

但是如果我们觉得这样写很麻烦,可以使用 new(std::nothrow)来申请内存,它默认抛出异常时返回NULL,但是得包含 new 头文件。

#include <new>
template<class T>
T* Alloc() {T* tmp = new(std::nothrow) T();return tmp;
}