用C++ 而不是 用c (4)使用异常和返回值
处理器,让new针对错误抛出异常。你也可以让malloc通过调用_set_new_mode使用同一处理器。
#include <new.h>
#include <new.h>
class bad_alloc : public exception {
public:
bad_alloc(const __exString& what_arg) : exception (what_arg) {}
};
int NewHandler (size_t size) {
throw bad_alloc("Operator new couldn't allocate memory");
return 0;
}
int APIENTRY WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow) {
_set_new_handler(NewHandler);
_set_new_mode(1); // use NewHandler for malloc as well
...
}
32.如果已存在的代码中没有设定new返回空值,那么你应该始终让new出错时抛出一个异常。
33.浮点数和整数不一样,在默认情况下它被零除不会出现异常,但是会出现一个非常奇怪的值"1.#INFO" (它表示这个值并不是一个数字)。要让检测浮点数问题更简单一些,你应该用如下的代码让浮点数错误抛出异常。
#include <float.h>
int cw=controlfp(0,0);
cw &= ~(EM_OVERFLOW | EM_UNDERFLOW | EM_INEXACT | EM_ZERODIVIDE | EM_DENORMAL | EM_INVALID);
_controlfp(cw, MCW_EM);
浮点数异常处理器必须调用_clearfp作为它的第一条指令来清空浮点数异常。

