Membervariable nutzen



  • Hallo,

    im Zuge des Lernens von C++ und meiner momentan Spielerei mit Pointern, Klassen und Co. bin ich auf etwas gestoßen, was mir noch nicht so ganz klar ist:

    Folgende Header-Datei

    class A {
    public:
    	void doStuff();
    	A();
    private
    	B* foo;
    };
    

    (Pseudocode)

    Mir gehts, wer häts gedacht, um den Pointer. Der Konstruktor von A:

    A::A() {
    	foo = new B(1, 2, 3);
    }
    

    Damit wird foo als Klasse von B erzeugt, richtig? Aber wie verwende ich dieses Objekt innerhalb der Klasse nun?

    Danke



  • So wie jede andere Variable.



  • Hendriks schrieb:

    Damit wird foo als Klasse von B erzeugt, richtig?

    Nein, ganz falsch.
    B ist eine Klasse, foo nicht. foo ist ein Pointer auf ein Objekt vom Typ B, d.h. das worauf foo zeigt soll die Eigenschaften der Klasse B haben. Vor der besagten Zeile zeigt foo irgendwo ins Nirvana (also auch nicht auf ein Objekt vom Typ B), erst mit dem new forderst du Speicher an, erzeugst in dem neu angeforderten Speicher ein Objekt vom Typ B und lässt foo dann darauf zeigen.

    Später kannst du dann foo wie jeden anderen Pointer auch benutzen.
    Allerdings sollte man sich immer überlegen, ob foo ein Pointer sein muss (statt einer normalen Membervariablen vom Typ B), und falls es der Fall ist sollte man an der Stelle auf jeden Fall Smartpointer verwenden.



  • Smartpointer benutzen warum? Weil du dir dann keine Gedanken um das Freigeben des Speichers (zerstören des Objektes foo) machen musst. Ansonsten solltest du im hier gezeigten Fall zumindest spätestens einen Destruktor mit der Zerstörung von foo beauftragen (delete foo).
    Gruß

    Ach so; benutzen z.B. wenn B eine Methode tuWas() hat: foo->tuWas();



  • Vielen Dank für die Erklärung!


Anmelden zum Antworten