Re[5]: Присвоение свойств и вызов виртуального метода из конструктора
От: Sharov Россия  
Дата: 15.11.16 11:26
Оценка:
Здравствуйте, sharez, Вы писали:

S>Здравствуйте, Sharov, Вы писали:


S>>Осн. идея в том, что обращение к this до создания родительского объекта не валидно. На мой взгляд, вполне разумно и безопасно.


S>Лично я вижу здесь разногласия о том, что должен делать конструктор, а должен он:

S>1) Выделить память (это такой атавизм, из которого и растут корни)
S>2) Задать свойства
S>и так как он технически является ещё и функцией, то
S>3) Инициализировать себя
S>но этот шаг почему-то встревает между 1 и 2 по необъяснимой причине.

S>Часто натыкаюсь в интернете, что не стоит пользоваться свойством конструктора-функции, т. е. использовать (1,2) и не использовать (3).

S>Я же думаю, что выделение памяти это как бы предконструирование объекта, которое вообще должно быть вынесено за пределы контролируемого процесса в ЯВУ, и логически эти пунткы должны группироваться вот так (1)-(2, 3) или (1)-(3, 2), где шаг (1) вообще сокрыт от нас, и вызывается по цепочке отдельно от конструктора.
S>Мы же в современных ЯВУ имеем тенденцию склеивать совершенно разнородные процессы (1,2) только ради правильного выделения памяти.

S>Вот как должно быть: когда мы вызываем конктруктор, то он вызывает по цепочке все предконструкторы (без каких-либо параметров) просто для выделения памяти под все поля всех предков, и уже потом оперируем конструктором как собственно виртуальной функцией, вызываем её предков как сами того хотим (или не вызывать вообше, если не хотим).


Вы рассуждаете с той точки зрения, что вызывая n предконструкторов у нас будет n объектов. В реальности child и parent явл. собой один объект (область в памяти). Т.е. конструктор child не заменяет, а расширяет parent конструктор. Без parent конструктора говорить о child смысла нет. Поэтому пляски вокруг базовых конструкторов.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.