LINUX.ORG.RU

Это фича или баг?


0

0

С удивлением обнаружил что в программе на с++ скомпиленной gcc VMT инициализируется после выхода из конструктора объекта, из-за чего вызов из конструктора виртуального метода срабатывает очень странно: вызывается случайным образом выбраный виртуальный метод с таким же именем из этой иерархии объектов. Под масдаем таких проблем не припомню (может просто такой ситуации не случалось, проверить не могу т.к. масдая поблизости нигде нет). А как вообще правильно должно быть? Правила какие-либо на точку инициализации VMT? А то воркароунд приходится лепить :( жуууткий :(.

anonymous

RTFM Из конструктора нельзя вызывать виртуальные методы, т.к. наследник к тому времени еще не инициализирован и состояние объекта не определено

Читать труп страусса - Design & Evolution..., The C++ Programming Language

ARia

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.