Fragen zu Klassen



  • Morgen!

    Hier die erste Frage:

    1.) Ich habe viele Variablen in meiner Klasse dich ich erst während der Laufzeit initialisieren kann (auf 0 setzen). Das ist doof, muss ich jetzt um auf nummer sicher zu gehen die Variablen z.B. im Konstruktur initialisieren oder werden die automatisch irgendwie initilisiert so das nicht der Speicherinhalt enthalten ist, der der die Variable zugewiesen wurde?

    2.) Ich benutze die Klasse nur ganz kurz in bestimmten Funktionen und will danach nicht mehr mit ihnen weiterarbeiten. Reicht es dann wenn ich

    class foo

    foo.bla();

    mache oder sollte ich dennoch richtig mit new eine Klasse anlegen?



  • zu 1) der Konstruktor initialisiert deine Variabeln automatisch mit 0. Wenn du das nicht willst, dann kannst du das über den Basis-Initialisierer machen oder im Konstruktor.

    zu 2) ups was überlesen 😃 Wenn du sie nur in Funktionen nutzt, wird die Instanz nach verlassen der Funktion automatisch zerstört, wenn du sie normal initialisierst, also nicht mit new.



  • Ok danke sehr!



  • Ok danke sehr!



  • PuppetMaster2k schrieb:

    zu 1) der Konstruktor initialisiert deine Variabeln automatisch mit 0. Wenn du das nicht willst, dann kannst du das über den Basis-Initialisierer machen oder im Konstruktor.

    Als ich es grade ausprobiert habe, wurde nichts mit 0 initialisiert!



  • das stimmt ja auch nicht. Die Varibalen werden im Konstruktor nicht autonmtisch initialisiert. Du musst sie entweder alle per Hand initialsieren, oder du nimmst (was auf keinen Fall zu empfehlen ist) ZeroMemory. Damit hab ich mich ewig rumgeplagt, als ich std::vector-Objekte in Objekten eingebettet hatte.



  • ZeroMemory hat in einer Klasse nix zu suchen - wir wollen doch keine vtables überschreiben, oder?

    Es wird immer der Standard Ctor aufgerufen, auch für builtins. Nur tut der Default Ctor für builtins nix.

    Ist aber auch nicht so schwer ein
    foo(0)
    in die initliste einzutragen, oder?

    und zu viele variablen sollte ne klasse ja auch nicht haben...


Anmelden zum Antworten