大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?

hello everyone,when a class has a vector as it's data member,why its size is always 24?

本文关键字:为什么 数据成员 向量 有一个 一个 大家      更新时间:2023-10-16

这里是类

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是一个容器,它有自己的成员变量来管理它所表示的内部数组,并且它们被计算在内以及大小的一部分。在您的情况下,ab元素的数量都太少,无法使其重新分配其内部数组以容纳比最初用于容纳单个元素的数组更多的数组。

为了说明,我的编译器在这两种情况下都返回 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;
}

向量内容的大小不会改变类的大小。矢量对象将始终占用 24 个字节,使用您当前使用的 std lib 实现。要成为动态数组,向量会动态分配内存以保存其内容。向量类中的实际内容是向量的容量、当前大小以及指向数据的指针。班级规模始终是静态的

相关文章: