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



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

有一个类重载了 new 运算符,重载方法有一个逻辑,在创建超过 2 个对象时返回(void( nullptr* 说。

现在在主代码中,我们有一个用于 5 次迭代的 for 循环 - 我预计从第 3 次迭代开始,运算符将返回nullptr,但程序实际上崩溃了。

从运算符返回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

最新更新