Best Practice: Vorwärtsdeklaration



  • Hallo zusammen,

    ich habe in einer Header-Datei ausschließlich Referenzen und Pointer auf Datentypen, die in einer anderen Header-Datei deklariert sind. Aus diesem Grund ist es ausreichend, eine Vorwärtsdeklaration zu verwenden. Wenn ich aber in der zugehörigen Implementierung z. B. auch auf Methoden dieser Datentypen zugreifen will, benötige ich dort ein #include. Ich frage mich nun: Kann ich dann nicht gleich die Datei im Header includen und mir die Vorwärtsdeklaration sparen? Was gewinnt man dadurch?

    Vielen Dank schon mal im Voraus für die Hilfe!



  • hejira schrieb:

    Kann ich dann nicht gleich die Datei im Header includen und mir die Vorwärtsdeklaration sparen? Was gewinnt man dadurch?

    Du gewinnst Kompilierzeit. Wenn du Header A.h hast, und diesen in B.h inkludierst, dann wird bei einer Änderung von A.h auch jede Datei neu kompiliert, die A.h inkludiert - logisch. Aber leider auch jede Datei, die B.h inkludiert usw.

    Wenn Du nun in B.h eine Vorwärtsdeklaration hast, dann wird bei Änderung von A.h nur B.cpp (und andere *.cpp, die A.h direkt inkludieren) kompiliert. Dateien, die nur B.h inkludieren, müssen dann nicht erneut kompiliert werden.



  • daddy_felix schrieb:

    Du gewinnst Kompilierzeit.

    Ah, okay. Hab ich zwar fast vermutet, aber die Erklärung dazu war ganz hilfreich. Danke!


Log in to reply