Почему свойства наследуемого класса сохраняются в базовом?
Компилятор выделяет под new A память для хранения всех производных классов?
конечно нет, он не знает всех производных классов, если вы напишете new A то вам и выделят память под объект типа A.
Другое дело что в вашем примере вы выделяете память под объект типа B, а не A:A* a = new B(2);
так что не очень понимаю ваше удивление, вы выделили памяти достаточно.
Спасибо! Вопрос всплыл по невнимательности.
А где-нибудь регламентирован порядок расположения в памяти членов базового/ производных классов?