簡體   English   中英

關於“不同地址”的規則是否適用於由new創建的對象?

[英]Does rule about “distinct addresses” apply to objects created by new?

C ++ 11標准草案說

除非對象是零字段或零大小的基類子對象,否則該對象的地址是它占用的第一個字節的地址。 如果一個是另一個的子對象,或者如果至少一個是零大小的基類子對象並且它們是不同類型的,則不是位字段的兩個對象可以具有相同的地址; 否則,他們應有不同的地址。 (1.8(6))

但是,之前它說可以通過一個new表達式創建一個對象,並且可以想象一個new表達式可能導致調用用戶定義的operator new() ,該operator new()可以返回為此保留的某個char[]塊的地址。目的(第一個分配可以返回塊的第一個地址),這意味着有兩個對象沒有不同的地址(由newchar[]塊創建的對象)。 1.8(6)是否意味着用戶定義的new以這種方式工作是非法的? 或者它只是語言定義中的一個漏洞?

顯然,如果使用char[]將地址作為“自定義” operator new ,則char[]對象將與您創建的對象重疊。

只要你不同時將char[]對象用於其他東西,它就不是真正的問題,而且這不是本節所討論的內容。

這不是真正的事情。 如果您確實創建了自己的operator new ,則不應允許它為它為其創建空間的對象返回相同的地址(或重疊地址)。 這將打破上述規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM