use*_*972 1 c++ operator-overloading new-operator
我正在开发一个不使用异常的项目,应该保持这种状态.为了使用我自己的内存管理器,我重载(overrid可能更正确)new运算符.在我的内存管理器中,如果分配失败 - 返回NULL.现在altough new运算符返回NULL,正在调用构造函数,然后我得到一个seg错误,因为我没有分配内存.我想要的功能是如果new运算符返回NULL,则不应该调用构造函数(之后我会检查对象是否已成功初始化).
我希望它能像这样工作:
myObject = new object(...);
if (NULL == myObject)
printf("error")
else
do something
Run Code Online (Sandbox Code Playgroud)
谢谢!
你需要调用new (nothrow),如下所示:
myObject* = new (std::nothrow) myObject(...);
Run Code Online (Sandbox Code Playgroud)
然后,而不是覆盖常规,operator new你需要覆盖所采取的那个std::nothrow_t.有关详细信息,请参阅此处:http: //www.cplusplus.com/reference/new/nothrow/
常规operator newwithout nothrow不应该在失败时返回null,而应该抛出.由于您不允许抛出,因此您无法实现这些运算符(除非通过调用abort()失败或类似的东西).
最后,在编译期间完全禁用异常可能会有所帮助.我希望当时会发现这种错误(我不确定).