Почему размер объекта 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
установлено в.