我有一个代码可以通过GMOCK进行测试,但面临一个特殊的问题。
有一个类重载了new运算符,重载的方法有一个逻辑来返回(void *)nullptr 比如创建更多的2个对象。
现在在主代码中我们有5次迭代的for循环 - 我期望第3次迭代以后 new 运算符将返回 nullptr 但程序实际崩溃。
答案 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