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;
}