包含数据向量的类向量的内存布局

时间:2014-05-06 12:27:07

标签: c++ vector

给出以下简化代码:

class A
{
public:   
    std::vector<int> v;
    int i;
}

int main()
{
   std::vector<A> v;
   v.push_back(A());
   v.push_back(A());
   v.push_back(A());
   v.push_back(A());
   v.push_back(A());
   v.push_back(A());
   v.push_back(A());
   v[5].v.push_back(15);
}

成员向量相对于其他成员存储在何处。将某些内容推回到成员向量中会导致类的向量重新洗牌吗? 或者是存储在其他地方的向量的内存,而类只包含对它的引用? (我想这个答案)

2 个答案:

答案 0 :(得分:3)

vector的内存存储在其他地方。添加和删​​除vector中的元素不会影响sizeofA的结构。

答案 1 :(得分:0)

当您编写

时,std vector的标头已在堆栈中分配
std::vector<A> v;

但在为元素分配内存时使用免费存储(即堆内存)。因此它对A的尺寸没有影响。

当谈论类的向量成员时,它的头被分配在分配类对象的地方(在上述情况下在免费商店中)。剩下的就是。