Где создана моя база? - PullRequest
2 голосов
/ 30 октября 2010

Если у меня есть:

struct Base
{
};

struct Derived : Base
{
};

И я создаю Derived в main:

Derived* d = new Derived;

где (в куче или в стеке) создается моя база?Правильно ли я рассуждаю о том, что база является частью производного, поэтому она создается везде, где создается производное?Или это работает по-другому?

Ответы [ 2 ]

5 голосов
/ 30 октября 2010

Вклад базового класса обычно является частью производного объекта (и поэтому использует часть памяти объекта вместе с производной частью). Однако ваш пример может сделать это неуместным, потому что часть базового класса занимает нулевую память из-за оптимизации пустого базового класса C ++.

Несмотря на то, что производная структура также пуста, конечный объект должен иметь размер не менее одного байта, поскольку все объекты должны занимать пространство, чтобы гарантировать, что адреса двух разных объектов будут разными. См .: Почему размер пустого класса не равен нулю? для получения дополнительной информации.

2 голосов
/ 30 октября 2010

База создается в том же сегменте памяти, что и производная.В вашем примере, поскольку вы выделяете Derived в куче, база также выделяется в куче.Они образуют один непрерывный объект в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...