@IliaNeverov

Как располагаются в памяти элементы массива обьектов класса?

Как устроены массивы объектов класса? По идее перемещения по массиву происходят когда указатель сдвигается на определенное количество бай, но объект класса может содержать и вектор и шаблонным может быть а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти. Как эта проблема решается в с++?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 2
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Объекты в C++ имеют постоянный размер, известный на этапе компиляции и равный sizeof(экземпляр)

Утверждение:
объект класса может содержать и вектор ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

неверно, так как вектор хранит свои данные не в своем экземпляре, а туда, куда их засунет аллокатор (обычно засовывает на кучу).

Утверждение:
[объект класса] и шаблонным может быть ... а значит разные элементы массива(объекты класса) могут занимать разное количество байт в памяти.

неверно, так как все шаблоны конкретизируются на этапе компиляции.

Следовательно, объекты класса сидят в массиве друг за дружкой, имеют фиксированный размер, и по ним можно ползать указателем, сдвигая его на этот размер.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Отличный вопрос!

Проблема есть, но она немного в другой плоскости, которую вы не упомянули - наследование. Т.е. например у вас иерархия классов с одним базовым классом и вы решаете хранить в массиве базовые классы, надеясь, что через базовый класс с помощью виртуальных методов выйдете на функционал наследников.
Так не получится, т.к., действительно, в массиве все объекты имеют одинаковый размер и если вы создаете массив базовых классов, то размер элемента массива будет равен размеру экземпляра базового класса. Так что все экземпляры классов наследников урежутся при помещении в массив.

Как эта проблема решается в с++?

С++ не решает эту проблему. Эту проблему решаете вы как программист.
Самое простое что приходит в голову - хранить в массиве не сами объекты, а указатели на них или ссылки.
Так же было бы не плохо запретить возможность создавать экземпляры базовых классов, тогда у вас в принципе не будет возможности создать подобный массив.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы