Почему размер объекта QList составляет 4 байта?

При попытке получить размер QList использование объекта sizeof()Функция дала мне 4 байта. Я пытался изменить количество элементов в списке, он также дал 4 байта? Я пытался изменить тип элементов в списке, снова это дало 4 байта?

Почему изменение количества или типа предметов не влияет на размер объекта?

2 ответа

Решение

Чтобы получить количество элементов в списке, используйте QList::size() не sizeof(), Что-то вроде этого:

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

sizeof() возвращает размер QList класс, который, как это часто бывает в классах Qt, состоит только из одного члена: указателя на приватную структуру. Если вы работаете в 32-битной ОС, для хранения адреса требуется 4 байта, поэтому вы sizeof(list) возвращает 4.

sizeof предоставляет вам размер времени компиляции самого объекта, а не данных, на которые он может указывать.

QList класс, содержащий указатель на структуру данных, которая фактически содержит указатель на данные, выделенные в куче; из всего этого, sizeof просто знает (и заботится) об этом первом бите QList содержит только указатель, следовательно, его размер составляет 4 байта.

Это та же самая причина, почему, если вы делаете

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

Он всегда будет печатать 4 (или любой другой размер указателя на вашем компьютере), независимо от того, что n установлено в.

Другие вопросы по тегам