给出以下简化代码:
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);
}
成员向量相对于其他成员存储在何处。将某些内容推回到成员向量中会导致类的向量重新洗牌吗? 或者是存储在其他地方的向量的内存,而类只包含对它的引用? (我想这个答案)
答案 0 :(得分:3)
vector
的内存存储在其他地方。添加和删除vector
中的元素不会影响sizeof
或A
的结构。
答案 1 :(得分:0)
当您编写
时,std vector的标头已在堆栈中分配std::vector<A> v;
但在为元素分配内存时使用免费存储(即堆内存)。因此它对A的尺寸没有影响。
当谈论类的向量成员时,它的头被分配在分配类对象的地方(在上述情况下在免费商店中)。剩下的就是。