Ключевое слово virtual
в C # позволяет переопределить метод или свойство дочерними классами. Для получения дополнительной информации см. документацию MSDN по ключевому слову «virtual»
ОБНОВЛЕНИЕ: Очевидно, что мой ответ не соответствует тому, что ожидалось, учитывая обстоятельства вопроса , но я оставлю его здесь для тех, кто ищет простой ответ на оригинал , заданный без описательного вопроса.
Компилятору не разрешено оптимизировать глобальные объекты.
Даже если они никогда не используются.
В вашем коде что-то еще происходит.
Теперь, если вы создали статическую библиотеку с вашим глобальным объектом и на этот глобальный объект не ссылается исполняемый файл, он не будет втянут в исполняемый файл компоновщиком.
Вы можете использовать
#pragma optimize off int globalVar #pragma optimize on
, но я не знаю, работает ли это только в Visual Studio ( http://msdn.microsoft.com/en-us/library/chh3fb0k (VS.80 ) .aspx ).
Вы также можете указать компилятору вообще не оптимизировать, особенно если вы отлаживаете ...
Как насчет использования ключевого слова volatile? Это предотвратит слишком большую оптимизацию компилятора.
Чтобы развить Arthur Ulfeldt, volatile сообщает компилятору, что эта переменная может изменяться вне зависимости от компилятора. Я использовал его для оператора put, позволяющего отладчику установить точку останова. Это также полезно для аппаратных регистров, которые могут изменяться в зависимости от среды или для которых требуется особая последовательность. т.е. регистр приема последовательного порта и определенные регистры сторожевого таймера.
Компилятор никогда не должен оптимизировать такие глобальные объекты - если он это сделает, он просто сломается.
Используете ли вы gcc с gdb? В прошлом была проблема, когда gdb не мог точно установить точки останова в конструкторах.
Кроме того, вы используете уровень оптимизации, который позволяет компилятору встраивать методы в определение класса.