我有以下声明:
void * operator new (size_t s, PersistentMemory * m) throw()
{return m->allocatePersistentMemory(s);}
我正在测试启动时的内存耗尽,这会导致m->allocatePersistentMemory(s);
返回 0。New 然后使用空指针调用构造函数this
但是,基于 C++ 2003 标准的 3.7.3.1 第 3 段:
分配存储失败的分配函数可以调用当前安装的 new_handler (18.4.2.2),如果有的话。[注意:程序提供的分配函数可以使用 set_new_handler 函数 (18.4.2.3) 获取当前安装的 new_handler 的地址。] 如果使用空异常规范 (15.4) 声明的分配函数 throw() 未能分配存储,它应返回空指针。任何其他分配存储失败的分配函数只能通过抛出类 std::bad_alloc (18.4.2.1) 或从 std::bad_alloc 派生的类的异常来指示失败。
我理解事物的方式是m->allocatePersistentMemory(s)
返回 null 应该导致整个operator new() throw()
返回 null 而无需调用构造函数。我是否在其他地方遗漏了其他一些可以覆盖这一点的条件?
谢谢!