我正在开发一个不使用异常的项目,并且应该保持这种状态。 为了使用我自己的内存管理器,我重载了(overrid会更准确一些)new操作符。在我的内存管理器中,如果分配失败 - 返回NULL。 现在,虽然新运算符返回NULL,但构造函数正在调用,然后我得到一个seg故障,因为我没有分配内存。 我想要的功能是,如果新的操作符返回NULL,那么不应该调用构造函数(并且之后我会检查对象是否成功初始化)。运算符新重载C++,无例外地处理故障
我希望它的工作是这样的:
myObject = new object(...);
if (NULL == myObject)
printf("error")
else
do something
谢谢!
的['操作者new'和'操作者新的[]'功能](http://en.cppreference.com/w/cpp/memory/new/operator_new )只分配内存,当你使用'new'运算符时,它是编译器创建代码以调用可能的构造函数。返回一个空指针('nullptr'或者''0)是失败时的正确行为。 –
新对象(...)分配内存并调用构造函数。我只想在分配成功时调用构造函数。我知道这是我所需要的nothrow选项,但是如何在超载时做出这样的事情? – user3445972
@JoachimPileborg只有当你通过'noexcept'或'throw()'声明你的分配函数为非抛出时,请参阅[basic.stc.dynamic.allocation] p3 - 当我禁用异常时,我不清楚这是否是暗示的。 – dyp