c++ - 当两个对象共享同一个地址时如何处理?
问题描述
背景:我对内存位置知之甚少,既不知道零大小对象如何工作,也不知道如何操作它们。
由于没有非静态数据成员的标准布局类类型的基类子对象的大小为零(source 1),我希望在下面的代码struct B
中具有零大小的基类子对象
struct A{};
struct B:A{};
int main(){A a; B b;}
a
和对象的大小都是b
1 字节,但在草案中它说(source_2):
大小为零的非位域子对象的地址是该子对象的完整对象所占用的未指定存储字节的地址。
那么基类子对象的地址是 占用的一个未指定字节的地址b
,但它只有 1 个字节,所以b
和它的基类子对象共享同一个地址?如果我没有遗漏任何东西并且结论是正确的,那么当“指向”时如何处理零大小的子对象?
解决方案
那么基类子对象的地址是b占用的一个未指定字节的地址,但它只有1个字节,所以b和它的基类子对象共享同一个地址?
是的。
如果我没有遗漏任何东西并且结论是正确的,那么当“指向”时如何处理零大小的子对象?
指针的值是(子)对象的地址。与非零大小的(子)对象相同。
推荐阅读
- php - 登录WordPress后重定向到访问过的页面
- c# - 如何区分 C# 中 typeof(int) == typeof(int?)
- javascript - jQuery 获取 CUT 的值
- android - RxAndroidBLE 执行 BLE 扫描,无需排队扫描操作
- jquery - 如何将淡入淡出从滚动更改为元素?
- node.js - 错误 Promise.all
- c# - CefSharp 错误:执行“ExecuteScriptAsync”或“EvaluateScriptAsync”时出现“浏览器尚未初始化”
- c# - 使用 IPv4 地址和非管理员用户时,ServiceController 无法在 Windows 10 1709+ 上启动服务
- php - 显示 HTML 文本而不执行它
- swift - CIImage 转换为 UIImage