gpt4 book ai didi

c++ - 关于 "distinct addresses"的规则是否适用于 new 创建的对象?

转载 作者:太空狗 更新时间:2023-10-29 21:44:59 25 4
gpt4 key购买 nike

C++11 标准草案说

Unless an object is a bit-field or a base class subobject of zero size, the address of that object is the address of the first byte it occupies. Two objects that are not bit-fields may have the same address if one is a subobject of the other, or if at least one is a base class subobject of zero size and they are of different types; otherwise, they shall have distinct addresses. (1.8(6))

然而,之前它说一个对象可以通过 new 表达式创建,可以想象 new 表达式可能会导致用户定义的 operator new () 被调用可以返回一些 char[] block 的地址它是为这个目的保留的(第一次分配可以返回 block 的第一个地址),这意味着那里是两个没有不同地址的对象(一个由 newchar[] block 创建)。 1.8(6) 是否意味着用户定义的 new 以这种方式工作是非法的?或者它只是语言定义中的一个漏洞?

最佳答案

显然,如果您使用 char[] 作为您的“自定义”operator new 分配地址,那么 char[] 对象将与您创建的对象重叠。

只要您不同时将 char[] 对象用于其他用途,这就不是真正的问题,这不是本节要讨论的内容。

这不是真正的意思。如果您确实创建了自己的 operator new,则不应允许它为其创建空间的对象返回相同的地址(或重叠地址)。这将违反上述规则。

关于c++ - 关于 "distinct addresses"的规则是否适用于 new 创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678617/

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