[英]Memory layout of a vector of classes containing a vector of data
给出以下简化代码:
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);
}
相对于其其他成员存储的成员向量在哪里。 将某些内容推回成员向量是否会导致类的向量重新排列? 还是向量的内存存储在其他地方,并且该类仅包含对其的引用? (我猜这个答案)
vector
的内存存储在其他位置。 从vector
添加和删除元素不会影响A
的sizeof
或结构。
在编写时, std向量的头已分配在堆栈上
std::vector<A> v;
但是在为元素分配内存时使用免费存储(即堆内存)。 因此,它对A的大小没有影响。
在谈论类的向量成员时,其头分配在分配类对象的位置(在上述情况下位于免费存储中)。 其余的成立。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.