Выделение памяти в конструкторе

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
JAGuar
Сообщения: 3
Зарегистрирован: 17 июн 2005, 16:28

Здравствуйте!

Недавно на одном из тестирований по С++ мне попался вопрос:
"Верно ли, что память под объект всегда выделяется в конструкторе?"

Интересно, что они имели в виду?
Насколько я понимаю, в кострукторе память, строго говоря,
ИНИЦИАЛИЗИРУЕТСЯ, а не ВЫДЕЛЯЕТСЯ.

Правильно ли я понимаю, что в следующем примере:

A *a = new A;

память под объект типа A выделится еще до вызова конструктора,
а не внутри конструктора?

Кроме того, стандартная реализация new, кажется, выделяет
дополнительную память для хранения размера объекта,
а конструктор этого не делает.
Можно ли рассматривать эту память
как "память, выделенную под объект"?

Заранее спасибо.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Неправда. Память под объект выделяется с помощью operator new (не путать new и operator new).
2B OR NOT(2B) = FF
Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

по-любому память выделяется ДО вызова конструктора. Так что вопрос тестирования "провокационный". Хотя, думаю, ответ на него: "неверно".
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Скорее всего вопрос из теста подразумевал выделение памяти не под сам объект, а под динамически размещаемые поля объекта. В любом случае вопрос как минимум криво сформулирован.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить