Wie verhindere ich, dass meine "nicht verwendeten" globalen Variablen kompiliert werden?

Ich verwende die statische Initialisierung, um das Registrieren einiger Klassen bei einer Factory in C ++ zu vereinfachen. Leider denke ich, dass der Compiler die "unbenutzten" Objekte optimiert, die die nützliche Arbeit in ihren Konstruktoren erledigen sollen. Gibt es eine Möglichkeit, den Compiler anzuweisen, eine globale Variable nicht zu optimieren?

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

SomeClass instance;

Mein Haltepunkt im Konstruktor von SomeClass wird nicht getroffen. In meinem eigentlichen Code befindet sich SomeClass in einer Header-Datei und die Instanz befindet sich mehr oder weniger allein in einer Quelldatei.

EDIT: Wie von KJAWolf erraten, wird dieser Code tatsächlich in eine statische Bibliothek kompiliert, nicht in die ausführbare Datei. Ihr Zweck ist es, einige Typen, die auch von der statischen Bibliothek bereitgestellt werden, mit einer statischen Liste von Typen und ihren Erstellern zu registrieren, damit eine Factory von der Konstruktion aus lesen kann. Da diese Typen mit der lib ausgestattet sind, ist das Hinzufügen dieses Codes zur ausführbaren Datei unerwünscht.

Außerdem habe ich festgestellt, dass das Verschieben des Codes in eine andere Quelldatei, die anderen vorhandenen Code enthält, problemlos funktioniert. Es scheint, dass eine Datei, die nur aus diesen globalen Objekten besteht, das Problem verursacht. Es ist, als ob diese Übersetzungseinheit völlig ignoriert wurde.

Antworten auf die Frage(9)

Ihre Antwort auf die Frage