2012-06-21 3 views

ответ

3

Когда дочерний интерфейс выделен, его размер включает размер родителя. Они не отдельные объекты, они объединены. «super» должен быть инициализирован, чтобы он мог подготовить своих членов данных. Затем ваш объект инициализирует своих членов. Например, скажем, у вас был пользовательский интерфейс подсчета ссылок, который должен инициализировать 'refCnt' до 1. Затем вы основываете свой интерфейс на этом интерфейсе. Это означает, что размер выделения вашего интерфейса - это размер интерфейса подсчета ссылок + размер ваших конкретных вкладов. (например, «int refCnt» в интерфейсе подсчета ссылок и «int x» в вашем интерфейсе означает sizeof (ваш интерфейс) == 8 ~.) Таким образом, распределение нужно только один раз. Затем вы инициализируете «супер» (интерфейс подсчета ссылок в этой ситуации), поэтому «refCnt» будет равен 1. После этого вы инициализируете свои собственные данные.

+0

Обратите внимание, что 'super' не является отдельным объектом. Это просто означает «я», но использую реализацию суперкласса именованного метода ». –

3

Поскольку «alloc» уже выделяет пространство для объекта, который вы создаете.

Ваш подкласс не должен выделять (разделять) пространство для базового класса.

Вы также можете найти полезную информацию в this related question.

Смежные вопросы