C++ 规则是关于;不同地址“;应用于由新创建的对象?

C++ 规则是关于;不同地址“;应用于由新创建的对象?,c++,c++11,standards,iso,C++,C++11,Standards,Iso,C++11标准草案说 除非对象是位字段或大小为零的基类子对象,否则该对象的地址就是它占用的第一个字节的地址。如果一个对象是子对象,则两个非位字段的对象可能具有相同的地址 或者至少有一个是大小为零的基类子对象,并且它们的类型不同;否则,, 他们应有不同的地址。(1.8(6)) 但是,前面它说可以通过new表达式创建对象,可以想象new表达式可以调用用户定义的操作符new(),该操作符可以返回为此目的保留的某个char[]块的地址(第一次分配可能返回块的第一个地址),这意味着有两个对象没有不同的地址

C++11标准草案说

除非对象是位字段或大小为零的基类子对象,否则该对象的地址就是它占用的第一个字节的地址。如果一个对象是子对象,则两个非位字段的对象可能具有相同的地址 或者至少有一个是大小为零的基类子对象,并且它们的类型不同;否则,, 他们应有不同的地址。(1.8(6))


但是,前面它说可以通过
new
表达式创建对象,可以想象
new
表达式可以调用用户定义的
操作符new()
,该操作符可以返回为此目的保留的某个
char[]
块的地址(第一次分配可能返回块的第一个地址),这意味着有两个对象没有不同的地址(由
new
创建的对象和
char[]
块创建的对象)。1.8(6)这意味着用户定义的
new
以这种方式工作是非法的?或者它只是语言定义中的一个漏洞?

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

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


这并不是关于tho的真正内容。如果您确实创建了自己的
操作符new
,则不应允许它为其创建空间的对象返回相同的地址(或重叠地址)。这将违反上述规则。

我认为
char
在这里很特殊,因为它可以别名任何其他类型。