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

C++ C++;以向量作为成员的结构的大小,c++,vector,struct,sizeof,std,C++,Vector,Struct,Sizeof,Std,我有一个结构,它有一些向量作为成员: struct my_struct { std::vector<int> x; // more members here }; 结构中的向量在程序执行过程中可能会发生明显的变化,例如 A.x.resize(...); 或 A.x.推回(…) 我的问题是,在程序运行的某个时刻,有没有办法知道内存中的大小?sizeof(A)不会返回正确的答案,因为向量成员不正确。向量的大小不会影响结构的大小,因为向量分配内存以容纳堆上的对象,至少使用默认

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

struct my_struct
{
    std::vector<int> x;
//  more members here
};
结构中的向量在程序执行过程中可能会发生明显的变化,例如

A.x.resize(...);
或 A.x.推回(…)


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

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

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

在这种情况下为什么不使用静态数组?现有代码使用向量,我需要这个结构来写入二进制文件。使用向量更容易,因为我可以直接将它们分配给其他向量(例如x=y)。当然,如果我的问题没有解决方案,我可以使用静态数组作为最后的解决方法。您可以使用迭代器构造函数/赋值重载。您是否意识到sizeof(某些向量)不取决于向量中的元素数?这很容易用三行程序检查。为什么在这种情况下不使用静态数组?现有代码使用向量,我需要这个结构来写入二进制文件。使用向量更容易,因为我可以直接将它们分配给其他向量(例如x=y)。当然,如果我的问题没有解决方案,我可以使用静态数组作为最后的解决方法。您可以使用迭代器构造函数/赋值重载。您是否意识到sizeof(某些向量)不取决于向量中的元素数?这很容易用一个三行程序检查。谢谢Pat,我认为在这种情况下,我最好使用静态数组,正如zch建议的那样。不是很优雅,但这是一个快速的解决方法。谢谢Pat,我认为在这种情况下我最好使用静态数组,正如zch建议的那样。不是很优雅,但这是一个快速的解决办法。
A.x.resize(...);