Konstruktor inline?



  • Hallo zusammen,
    ich habe da in einem Programm eine Exception, zu der ich kaum Informationen kriege.

    Nun habe ich mich ein wenig durch den Code vorher debugged und da auch nix ungewöhnliches gefunden, bis ich auf einmal einem der Konstruktoren nachspürte und der Debugger auf einmal nach dem Header rief 😮 .

    Jedenfalls hatte ich irgendwo noch im Kopf, mal ne Diskussion über inline gelesen zu haben, wo jemand vehement darauf bestand, dass Konstruktoren nicht inline sein sollten.
    Hab' dann auch was gefunden in diesem Thread:
    [url] Methoden die der Comiler eh inlined: inline angeben? [/url]

    Hab's aber jetzt nicht genau kapiert 😞 , was das Problem dann ist und wie sich das negativ Auswirken kann 😕 .

    Könnt Ihr mir das mal ungeachtet meines eigentlichen Probs (dem mit der Exception) ein wenig verdeutlichen?

    Wann ist ein inline-Konstruktor nachteilig?
    Würde die inline-Deklaration nicht eh vom Compiler wegoptimiert, wenn es da irgendwelche Probs mit gäbe 😕 ?
    Wie wirken sich die Nachteile schlimmstenfalls aus?

    Hoffe, ihr könnt mich erleuchten 😉 .

    Gruss von
    Qweety.



  • Hallo,
    inline-Konstruktoren haben die selben Probleme wie inline-Funktionen. Das Gemeine an Konstruktoren ist nur, dass der Compiler häufig in selbige noch zusätzlichen Code einfügen muss (zur Initialisierung von Membern und Basisklassen). Ein Konstruktor kann also fürchterlich kurz aussehen, man macht ihn deshalb inline, in Wirklichkeit ist er aber doch recht lang und schwupps hat man ein größeres Programm usw.

    Häufig werden Konstruktoren deshalb gar nicht erst inline generiert. Dann hat man doppelt verloren. Man hat höhere Abhängigkeiten wegen der sichtbaren Definition, trotzdem bleibt ein Konstruktor-Aufruf aber ein Funktions-Aufruf.

    Wie wirken sich die Nachteile schlimmstenfalls aus?

    Schlimmer als oben beschrieben wird's nicht. Egal ob der Compiler einen inline-Ctor nicht inlined oder einen normalen Ctor inlined (oder einen inline-Ctor inlined oder einen normalen Ctor nicht inlined), was immer er auch tut, das Verhalten des Programms muss von außen betrachtet immer gleich sein.



  • Jo, danke Hume 🙂 .

    War ich wohl leider auf der falschen Fährte *schnüff*. Aber ich find den Fehler noch :p . Grab' ich halt weiter.

    Viele Grüsse,
    Qweety.


Anmelden zum Antworten