Comments 6
Немного оффтоп, но недавно столкнулся с такой ошибкой:class Foo {
Bar a;
int b = 0;
...
Foo()
: a( [this] () { ... } )
{
}
};
То есть поле класса инициализировалось при помощи лямбды. И это падало, потому что остальные поля ещё не проинициализированы, а лямбда их использовала через this, переданный в замыкании (лямбда сразу выполнялась).
PVS-Studio, а вы могли бы выдавать предупреждение на такие ситуации?
А если... В конструкторе базового класса вызывается не виртуальная функция, но которая сама вызывает виртуальную функцию?
Кстати, может быть и критическая ошибка, если вызов попадёт на pure virtual функцию.
Будет то же самое, наследник ещё не сконструирован, поэтому будет вызвана реализация из базового класса.
Это понятно, что будет тоже самое. Я про то, что правило "не вызывать виртуальные методы в конструкторе/деструкторе" как бы неполное, требуется ещё и не вызывать методы, которые вызывают виртуальные методы или ... (в общем тут рекурсия)
Вызов виртуальных функций в конструкторах и деструкторах (C++)