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