CATEGORY / Development

让 C++ 的 new 操作失败时返回空指针

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 指针,来标记失败(而不是抛出异常)。

2 Comments / Trackbacks / Pingbacks

  • Aug 1, 2010 @ 20:11 Reply / Quote / #1

    "new (nothrow) T" throws.

  • Sep 3, 2010 @ 12:43 Reply / Quote / #2

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

Leave a Reply

:) :wink: 8-O :lol: :-D 8) :-| :mrgreen: :oops: :-o :-? :( :twisted: :cry: more »