以向量为成员的结构的 C++ 大小

Posted

技术标签:

【中文标题】以向量为成员的结构的 C++ 大小【英文标题】:C++ Size of Struct with Vectors as Members 【发布时间】:2012-05-12 13:11:28 【问题描述】:

我有一个结构,它有一些向量作为成员:

struct my_struct

    std::vector<int> x;
//  more members here
;

还有一个 my_struct 的实例:

my_struct A;

结构体中的向量在程序执行过程中明显会发生变化,比如

A.x.resize(...);

或 a.x.push_back(...);

我的问题是,有没有办法在程序的某个时候知道 A 在内存中的大小? sizeof(A) 不返回正确答案,因为向量成员。

【问题讨论】:

这种情况下为什么不用静态数组? 现有代码使用向量,我需要这个结构来写入二进制文件。使用向量更容易,因为我可以直接将它们分配给其他向量(例如 x = y)。 当然,如果我的问题没有解决方案,我总是可以使用静态数组作为最后的解决方法。 可以使用迭代器构造函数/赋值重载。 你意识到 sizeof(some vector) 不依赖于向量中元素的数量吗?这可以通过三行程序轻松检查。 【参考方案1】:

向量的大小不会影响结构的大小,因为向量分配内存以保存堆上的对象,至少使用默认分配器。此外,将结构内容写入文件时,永远不会写入向量保存的对象,只会写入向量数据成员的值。这些对象由某种指针中的向量引用,因此写入文件的是指针的值(地址),而不是它指向的数据。 要将向量及其对象写入文件,您需要自己实现。也许 boost 序列化在这里可能会有所帮助。

【讨论】:

谢谢帕特,我认为在这种情况下我最好只使用静态数组,就像 zch 建议的那样。不是那么优雅,但它是一种快速的解决方法。

以上是关于以向量为成员的结构的 C++ 大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在初始化时设置结构的向量成员的大小?

C++ 未初始化的结构成员 - 字段不存在

具有 const 成员的结构向量

C++ 成员引用基类型'Vertex *const'不是结构或联合

c++ 内存分配向量的指针

c++ 以最佳方式返回结构和向量