为什么 QList 对象的大小是 4 个字节?

Why the size of the QList object is 4 bytes?

当尝试使用 sizeof() 获取 QList 对象的大小时,函数给了我 4 个字节。 我试着改变列表中的项目数,它也给了 4 个字节? 我试图更改列表中项目的类型,它又给了 4 个字节?

为什么项目数量或类型的变化不影响对象大小?

要获取列表中的项目数,请使用 QList::size() 而不是 sizeof()。像这样:

QList<MyObject> list;
list.append(object1);
list.append(object2);
int size = list.size();

sizeof() returns QList class 的大小,这是 Qt classes 的常见情况,仅由一个成员:指向私有结构的指针。假设您使用的是 32 位 OS,存储地址需要 4 个字节,因此您 sizeof(list) returns 4.

sizeof 为您提供对象本身的编译时大小,而不是它可能指向的数据的大小。

QList 是一个 class 包含指向数据结构的指针,该数据结构实际上包含指向堆分配数据的指针;在所有这些东西中,sizeof 只知道(并关心)第一位 - QList 只包含一个指针,因此它有 4 个字节大。

这与你这样做的原因完全相同

int n;
std::cin>>n;
int *foo = new int[n];
std::cout<<sizeof(foo);
delete[] foo;

无论 n 设置的是什么,它总是会打印 4(或您机器上的任何指针大小)。