Я использую статическую инициализацию, чтобы упростить процесс регистрации некоторых классов на фабрике в C ++. К сожалению, я думаю, что компилятор оптимизирует «неиспользуемые» объекты, которые должны выполнять полезную работу в своих конструкторах. Есть ли способ сказать компилятору не оптимизировать глобальную переменную?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
Моя точка останова в конструкторе SomeClass не была достигнута. В моем реальном коде SomeClass находится в заголовочном файле, а экземпляр - в исходном файле, более или менее в одиночку.
EDIT: как и предполагал KJAWolf, этот код фактически скомпилирован в статическую библиотеку, а не в исполняемый файл. Его цель состоит в том, чтобы зарегистрировать некоторые типы, также предоставляемые статической библиотекой, со статическим списком типов и их создателей для фабрики, чтобы затем читать из нее при конструировании. Поскольку эти типы предоставляются библиотекой lib, добавление этого кода в исполняемый файл нежелательно.
Также я обнаружил, что, перемещая код в другой исходный файл, который содержит другой существующий код, он работает нормально. Кажется, что проблема заключается в наличии файла, состоящего исключительно из этих глобальных объектов. Как будто эта единица перевода была полностью проигнорирована.