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