根据C ++标准,以下代码是否为未定义行为?请共享C ++标准参考。
void* operator new(std::size_t sz)
{
return ::new int(5);
}
1特别讨论分配功能的要求。它列出了此类函数必须满足的所有要求,并且没有明确禁止调用全局分配函数。
它确实这样说:如果成功,它将返回一个存储块开始的地址,该存储块的字节长度至少等于请求的大小。
您的函数总是返回一个等于也这样说sizeof(int)
的块。6.7.5.4
如果分配或释放功能的行为不满足[basic.stc.dynamic.allocation]和[basic.stc.dynamic.deallocation]中指定的语义约束,则该行为未定义。
此答案的先前版本忽略了这一点。您的函数不会返回与请求的大小相等(被忽略)的内存块,因此行为未定义。