У меня есть иерархия классов, где у каждого класса есть метод compute
, который запускает некоторые (пере) вычисления. Этот метод является виртуальным (и он чисто виртуальный в базовом классе). В некоторых случаях я хотел бы вызвать этот метод из конструктора, чтобы немедленно настроить мой экземпляр.
Конечно, это может быть опасно. Eclipse CDT Code Analysis выдает ошибку «Вызов виртуального метода в конструкторе может вызвать сбои и непредвиденное поведение». Я понимаю сообщение об ошибке и ее причину. Пожалуйста, пожалуйста, , а не , скажите мне, почему этого следует избегать !!!
Чтобы сообщение об ошибке и (что более важно) возможность устранения ошибки исчезли, я ввелОператор разрешения области. Итак, конструктор теперь выглядит так:
MyClass::MyClass()
{
MyClass::compute();
}
Я бы ожидал, что это будет абсолютно безопасно. Но анализ кода Eclipse продолжает отображать сообщение об ошибке. Почему? Невозможно вызвать неожиданный метод. И если бы метод был чисто виртуальным в MyClass
, компилятор сказал бы мне об этом.
Это ошибка анализа кода Eclipse или я что-то упустил?
Редактировать: оператор разрешения области видимостидолжен подавлять виртуальное разрешение. Поэтому я ожидаю, что это предотвратит все возможные ошибки, упомянутые в предупреждении. Верно ли мое предположение?