Мы сейчас посмотрим на примере Borland C++ для DOS. Так понятнее, для нас главное идея. А в следующем шаге посмотрим, как работает тоже самое в управляемом коде. Объявим класс и создадим объект.
class CMyClass { public: CMyClass(); int x; char c; }; CMyClass::CMyClass() { x=5; c='a'; } void main() { CMyClass s; }
И соберем проект. Я поставил оптимизацию по скорости. Смотрим размер:
Теперь объявим массив классов:
CMyClass s[100];
И опять смотрим размер:
Изменился, но не значительно. Правильно, это не статический класс. Хотя выглядит похоже. BC++ за нашей спиной производит всякие манипуляции. Статический класс этот тот класс, память под который находиться внутри модуля EXE. Изменим класс модификатором static.
static CMyClass s[100];
И посмотрим свойства:
Другое дело. Мы даже место можем увидеть, если посмотрим EXE в блокноте.
Не верите? Объявите массив int в классе:
class CMyClass { public: CMyClass(); int x[100]; char c; };
И опять посмотрите:
Вот оно. В MS DOS это место было ограничено и нельзя было создать большой массив. Так вот практически все классы, которые Вы создаете в VC++ по факту динамические, потому что в динамической памяти находятся даже, если Вы не используете NEW.