Re[2]: Еще раз о виртуальной базе при одиночном наследовании
От: PVA  
Дата: 20.11.06 09:30
Оценка:
Здравствуйте, MasterZiv, Вы писали:

PVA>>Интересует почему в случае с leaf нужный конструктор derived(name) вызывается, но инициализации base не происходит?


MZ>Как это — нужный конструктор вызывается, но инициализация не происходит ?

MZ>Инициализация по вашему это что, кроме как не вызов конструктора ?
Попробую еще детальней
1. Происходит вызов base() — чудненько, base constructed
2. Происходит вызов параметризированного конструктора derived(const char * name), у которого параметром идет переданная строка "WTF?"
Дальше не интересно. Интересно, почему игнорируется вызов : base(name) из списка инициализации derived(...)?

MZ>На самом деле вызов конструктора base НЕ будет производиться из вызова конструктора derived,

Вот в этом и вопрос — почему?

MZ>все вызовы конструкторов виртуальных баз должны быть ЯВНО прописаны в каждом из наследников, потому что по дереву наследования, поскольку есть несколько путей к предку, невозможно однозначно определить место, в котором должен следовать вызов конструктора виртуалной базы в порядке следования вызовов конструкторов предков.

Совершенно с этим согласен и не спорю.

В целом можно считать вопрос закрытым. Странно, что компилер даже ворниг не выдает.
newbie
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.