Здравствуйте, 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>все вызовы конструкторов виртуальных баз должны быть ЯВНО прописаны в каждом из наследников, потому что по дереву наследования, поскольку есть несколько путей к предку, невозможно однозначно определить место, в котором должен следовать вызов конструктора виртуалной базы в порядке следования вызовов конструкторов предков.
Совершенно с этим согласен и не спорю.
В целом можно считать вопрос закрытым. Странно, что компилер даже ворниг не выдает.