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

问题描述 投票:1回答:2

这个问题在这里已有答案:

这是班级

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?

c++ class vector
2个回答
1
投票

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;
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.