Permanent Link: http://wutiam.net/2010/02/let-cpp-new-operator-return-null-when-failed/
C 中如果创建一个对象失败,就会返回空指针。但是对于 C++ 就不一样了,new 是不应返回空指针的,书上的推荐做法是在构造函数里抛异常。
当不想引入异常机制的时候,一般的做法是在构造器里啥都不做(最多做个变量初始化),加一个 Init() 函数来完成真正的初始化工作。
然而这样就使得每次创建一个对象,都要执行两步(new+init),总不是太方便,其实 C++ 的 new 操作符是带参的,可以通过“new(std::nothrow) CXxx”的方式让 new 失败时返回 null 指针,来标记失败(而不是抛出异常)。

fr3@K
"new (nothrow) T" throws.
islet8
@ fr3@K
嗯,如果构造的对象它在构造器里构造其他子对象时失败,的确没办法。。。但个人认为 C++ 的 exception 机制并不是一个很好的设计