当void * nullptr使程序崩溃时,运算符重载了new

时间:2017-08-03 10:32:40

标签: c++ gmock

我有一个代码可以通过GMOCK进行测试,但面临一个特殊的问题。

有一个类重载了new运算符,重载的方法有一个逻辑来返回(void *)nullptr 比如创建更多的2个对象。

现在在主代码中我们有5次迭代的for循环 - 我期望第3次迭代以后 new 运算符将返回 nullptr 但程序实际崩溃。

1 个答案:

答案 0 :(得分:0)

从您的运算符返回nullptr会导致未定义的行为 从3.7.4.1分配函数:

  

(2)分配功能尝试分配所请求的存储量。如果成功,它将返回存储块的起始地址,其长度以字节为单位应至少与其一样大   要求的大小。

     

(3)无法分配存储的分配函数可以调用当前安装的新处理函数(18.6.2.3),如果有的话。 [注意:程序提供的分配功能可以获取当前的地址   使用std :: get_new_handler函数(18.6.2.4)安装new_handler。 - 结束注释]如果使用非抛出异常规范(15.4)声明的分配函数无法分配存储,则应返回   空指针。任何其他无法分配存储的分配函数都应仅通过抛出与std :: bad_alloc(18.6.2.1)类型的处理程序(15.3)匹配的类型的异常来指示失败。

当您对投掷new运算符进行重载时,不应返回nullptr