gpt4 book ai didi

c++ - 在 operator new 的重载中调用 new 表达式

转载 作者:行者123 更新时间:2023-12-01 14:40:18 27 4
gpt4 key购买 nike

以下代码是否符合 C++ 标准的未定义行为?请分享 C++ 标准引用。

void* operator new(std::size_t sz)
{
return ::new int(5);
}

最佳答案

6.7.5.4.1 1具体讲了对分配函数的要求。它列出了此类函数必须满足的所有要求,并且没有明确禁止调用全局分配函数。

它确实这样说:

If it is successful, it returns the address of the start of a block of storage whose length in bytes is at least as large as the requested size.



你的函数总是返回一个大小等于 sizeof(int) 的 block 。 .

6.7.5.4 也这样说

If the behavior of an allocation or deallocation function does not satisfy the semantic constraints specified in [basic.stc.dynamic.allocation] and [basic.stc.dynamic.deallocation], the behavior is undefined.



该答案的先前版本错过了这一点。您的函数不会返回大小等于请求大小(被忽略)的内存块,因此行为未定义。

1 上 this地点。

关于c++ - 在 operator new 的重载中调用 new 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58847010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com