大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?
hello everyone,when a class has a vector as it's data member,why its size is always 24?
这里是类
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;
}
向量内容的大小不会改变类的大小。矢量对象将始终占用 24 个字节,使用您当前使用的 std lib 实现。要成为动态数组,向量会动态分配内存以保存其内容。向量类中的实际内容是向量的容量、当前大小以及指向数据的指针。班级规模始终是静态的
相关文章:
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 大家好,当一个类有一个向量作为它的数据成员时,为什么它的大小总是24?
- 为什么c++中类的大小取决于数据成员的公共/私有状态
- 为什么类成员数据必须是静态的才能被模板化类的模板化结构成员访问
- 为什么静态数据成员不能在c++11中的类中初始化
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 为什么不能使用"( )"为类的非静态数据成员提供默认值?
- 为什么C++不允许我在类中使用字符串作为数据成员?
- 我们可以直接为任何数据成员赋值. 为什么要使用构造函数?
- 为什么必须在C++中定义静态数据成员?
- 为什么当类的数据成员更改为引用时输出不同
- 为什么我的某些数据成员"expression must be an lvalue or a function designator"收到此错误?
- 为什么C++编译器不优化对结构数据成员的读取和写入,而不是不同的局部变量?
- C++为什么 int 变量可以声明为类的私有数据成员,但不能声明为字符串变量
- 为什么添加静态数据成员会导致链接器失败
- 为什么INVOKE总是取消引用数据成员,而不是在可能的情况下调用
- 只有当声明一个对象时,内存空间才会分配给类的数据成员,那么为什么 Sizeof(class_name) 给我结果
- 为什么C 标准专门为具有不同访问说明符的类数据成员的内存布局提供了余地
- 为什么在静态数据成员初始化器中未完全定义类
- 为什么数据成员的模板功能仅在符合"this"时才是依赖名称?