【发布时间】:2015-09-24 11:49:55
【问题描述】:
我正在开发一个不使用异常的项目,并且应该保持这种状态。 为了使用我自己的内存管理器,我重载了(重写可能更正确)新运算符。在我的内存管理器中,如果分配失败 - 将返回 NULL。 现在虽然 new 运算符返回 NULL,但正在调用构造函数,然后我得到一个 seg 错误,因为我没有分配内存。 我想要的功能是,如果 new 运算符返回 NULL,则不应调用构造函数(之后我将检查对象是否已成功初始化)。
我希望它像这样工作:
myObject = new object(...);
if (NULL == myObject)
printf("error")
else
do something
谢谢!
【问题讨论】:
-
operator newandoperator new[]functions 只分配内存,当您使用new运算符时,编译器会创建代码来调用可能的构造函数。返回空指针(nullptr或0)是失败时的正确行为。 -
new object(...) 分配内存并调用构造函数。我希望它仅在分配成功时才调用构造函数。我知道我需要的 nothrow 选项,但是在重载时如何做这样的事情?
-
@JoachimPileborg 仅当您通过
noexcept或throw()将分配函数声明为非抛出时,请参阅 [basic.stc.dynamic.allocation]p3 - 我不清楚是否这是在禁用异常时暗示的。
标签: c++ operator-overloading new-operator