[英]Does rule about “distinct addresses” apply to objects created by new?
C ++ 11標准草案說
除非對象是零字段或零大小的基類子對象,否則該對象的地址是它占用的第一個字節的地址。 如果一個是另一個的子對象,或者如果至少一個是零大小的基類子對象並且它們是不同類型的,則不是位字段的兩個對象可以具有相同的地址; 否則,他們應有不同的地址。 (1.8(6))
但是,之前它說可以通過一個new
表達式創建一個對象,並且可以想象一個new
表達式可能導致調用用戶定義的operator new()
,該operator new()
可以返回為此保留的某個char[]
塊的地址。目的(第一個分配可以返回塊的第一個地址),這意味着有兩個對象沒有不同的地址(由new
和char[]
塊創建的對象)。 1.8(6)是否意味着用戶定義的new
以這種方式工作是非法的? 或者它只是語言定義中的一個漏洞?
顯然,如果使用char[]
將地址作為“自定義” operator new
,則char[]
對象將與您創建的對象重疊。
只要你不同時將char[]
對象用於其他東西,它就不是真正的問題,而且這不是本節所討論的內容。
這不是真正的事情。 如果您確實創建了自己的operator new
,則不應允許它為它為其創建空間的對象返回相同的地址(或重疊地址)。 這將打破上述規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.