首页 > 解决方案 > 当两个对象共享同一个地址时如何处理?

问题描述

背景:我对内存位置知之甚少,既不知道零大小对象如何工作,也不知道如何操作它们。

由于没有非静态数据成员的标准布局类类型的基类子对象的大小为零(source 1),我希望在下面的代码struct B中具有零大小的基类子对象

struct A{};
struct B:A{};
int main(){A a; B b;}

a和对象的大小都是b1 字节,但在草案中它说(source_2):

大小为零的非位域子对象的地址是该子对象的完整对象所占用的未指定存储字节的地址。

那么基类子对象的地址是 占用的一个未指定字节的地址b,但它只有 1 个字节,所以b和它的基类子对象共享同一个地址?如果我没有遗漏任何东西并且结论是正确的,那么当“指向”时如何处理零大小的子对象?

标签: c++objectpointers

解决方案


那么基类子对象的地址是b占用的一个未指定字节的地址,但它只有1个字节,所以b和它的基类子对象共享同一个地址?

是的。

如果我没有遗漏任何东西并且结论是正确的,那么当“指向”时如何处理零大小的子对象?

指针的值是(子)对象的地址。与非零大小的(子)对象相同。


推荐阅读