这个问题在这里已有答案:
这是班级
class A{
public:
vector<int> vvv1{1};
};
class B{
public:
vector<int> vvv2{1,2,3,4,5};
};
和主要的
int main(){
A a;/*sizeof(a) == 24;*/
B b;/*sizeof(b) == 24;*/
return 0;
}
为什么a的大小和b的大小都是24?
sizeof()
为您提供对象占用的内存中的字节数。类std::vector
是一个容器,它有自己的成员变量来管理它所代表的内部数组,并且它们也被计算在一起。在你的情况下,a
和b
的元素数量都太小,无法重新分配其内部数组,以保持比最初用于保存单个元素的数组更多的内容。
为了说明,我的编译器为这两种情况返回32:
#include <vector>
int main()
{
std::vector<int> a{ 1 };
std::vector<int> b{ 1,2,3,4,5 };
int sizeA = sizeof(a); // Returns 32
int sizeB = sizeof(b); // Returns 32
return 0;
}
向量内容的大小不会改变类的大小。使用当前正在使用的std lib实现,vector对象总是占用24个字节。要成为动态数组,向量会动态分配内存以保存其内容。矢量类中实际上是矢量的容量,它的当前大小和指向数据的指针。班级大小始终是静态的