2012-05-12 31 views
1

我有具有一定的矢量作为成员结构:结构内C++大小作为会员

my_struct A; 

的载体(S):

struct my_struct 
{ 
    std::vector<int> x; 
// more members here 
}; 

和my_struct的一个实例可以在程序的执行过程中发生明显改变,语句如下

A.x.resize(...); 

或 Axpush _背部(...);

我的问题是,有什么方法可以在程序中的某个时间点知道A的内存大小吗?由于向量成员的原因,sizeof(A)不返回正确的答案。

+4

为什么不在这种情况下使用静态数组? – zch

+0

现有的代码使用向量,我需要这个结构写入二进制文件。使用矢量使得它更容易,因为我可以直接将它们分配给其他矢量(例如x = y)。 – MGA

+0

当然,如果没有解决我的问题,我总是可以使用静态数组作为最后的解决方法。 – MGA

回答

4

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

+0

谢谢帕特,我认为在这种情况下我最好使用静态数组,正如zch所建议的那样。不太优雅,但它是一个快速的解决方法。 – MGA