Анализатор обнаружил потенциально
возможную ошибку, связанную с изменением поведения перекрытых виртуальных
функций.
Пример изменения поведения виртуальных функций.
|
Перед вами классический пример, с которым может столкнуться разработчик, переносящий свое приложение на 64-битную архитектуру. Проследим жизненный цикл разработки некоторого приложения. Пусть первоначально оно разрабатывалось под Visual Studio 6.0. когда, функция WinHelp в классе CWinApp имела следующий прототип:
|
Совершенно корректно было осуществить перекрытие виртуальной фукции в классе CSampleApp, как показано в примере. Затем проект был перенесен в Visual Studio 2005, где прототип функции в классе CWinApp претерпел изменения, заключающиеся в смене типа DWORD на тип DWORD_PTR. На 32-битной платформе такая программа продолжит совершенно корректно работать, так как здесь типы DWORD и DWORD_PTR совпадают. Неприятности проявят себя при компиляции данного кода под 64-битную платфому. Получатся две функции с одинаковыми именами, но с различными параметрами, в результате чего перестанет вызываться пользовательский код.
Анализатор позволяет обнаруживать подобные ошибки, исправление которых не представляет сложности. Достаточно изменить прототип функции в классе наследника, как показано ниже:
|
Смотрите также:























