微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类的成员变量需要更多内存:地址更改?

如何解决类的成员变量需要更多内存:地址更改?

我想我的问题不需要最小的工作示例;这可能很容易描述。

让我们假设有一个类实例,它将一些对象存储为成员。现在其中一个成员在运行时增长。创建实例后,member1 消耗了 10 个字节,member2 消耗了 20 个字节。然后 object1 以某种方式被修改,现在需要 15 个字节。

我的问题是,member1(的第一个字节)的地址是否不变?或者,member1 的第一个字节现在有可能像以前一样有另一个地址吗? 成员变量是否在堆上分配?

感谢您的反馈!

最佳

解决方法

现在其中一个成员在运行时增长。

这种情况在 C++ 中是不可能的。对象的大小(以及类型的大小)在运行时是恒定的。

member1 现在有另一个地址吗?

没有。对象的地址在其整个生命周期中永远不会改变。

我有一个 Class 实例,其成员来自外部库,我什至不知道他们如何在内部存储成员。

成员变量的类型必须完整。这意味着必须已经定义了类型。如果它被定义,那么它的大小和内部成员是已知的。您可能已经通过包含头文件来包含类型的定义。您可以阅读该标题以了解定义。

所以这只能使用堆分配,是吗?

不一定。例如,可能有一个预先分配的缓冲区,其中可以包含多达某个常量限制的对象。

但通常是的,动态对象使用动态存储。根据对内存使用量增加的观察,情况似乎确实如此。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。