Jak zapobiec kompilacji moich „nieużywanych” zmiennych globalnych?

Używam statycznej inicjalizacji, aby ułatwić proces rejestrowania niektórych klas w fabryce w C ++. Niestety, myślę, że kompilator optymalizuje „nieużywane” obiekty, które mają wykonywać użyteczną pracę w ich konstruktorach. Czy jest jakiś sposób, aby powiedzieć kompilatorowi, aby nie optymalizował zmiennej globalnej?

class SomeClass {
    public:
        SomeClass() {
            /* do something useful */
        }
};

SomeClass instance;

Mój punkt przerwania w konstruktorze SomeClass nie został trafiony. W moim rzeczywistym kodzie SomeClass znajduje się w pliku nagłówkowym, a instancja znajduje się w pliku źródłowym, mniej lub bardziej samodzielnie.

EDYCJA: Jak domyśla się KJAWolf, ten kod jest w rzeczywistości wkompilowany w bibliotekę statyczną, a nie w plik wykonywalny. Jego celem jest zarejestrowanie niektórych typów udostępnianych również przez statyczną bibliotekę ze statyczną listą typów i ich twórców, aby fabryka mogła następnie odczytać z konstrukcji. Ponieważ typy te są dostarczane z lib, dodanie tego kodu do pliku wykonywalnego jest niepożądane.

Odkryłem również, że przenosząc kod do innego pliku źródłowego, który zawiera inny istniejący kod, działa dobrze. Wydaje się, że przyczyną problemu jest posiadanie pliku składającego się wyłącznie z tych obiektów globalnych. To tak, jakby ta jednostka tłumaczenia została całkowicie zignorowana.

questionAnswers(9)

yourAnswerToTheQuestion