Illuminatus hat geschrieben:Um Objekte auf dem Heap zu erzeugen? Also nur für Objekte die dynamisch sich während der Laufzeit oder ihrer Lebenszeit vergrößern/verkleinern?
Ersteres ja. Zweiteres nein. Du denkst da an Arrays. Ein Zeigertyp ist aber schon noch was anderes. Du brauchst ihn z.B., wenn ein Wert nur erzeugt werden soll, wenn es benötigt wird, bis dahin mit NULL initialisiert. Oder im Zusammenhang mit Polymorphie (Basisklassenzeiger).
Code: Alles auswählen
class Base {
};
class Derived : public Base {
};
class User {
Base* b; // Eine Referenz erlaubt kein neusetzen! Referenzen können nicht im Programmverlauf auf was neues zeigen, Zeiger schon
public: setMember(Base* newB) {
b = newB;
};
/// main
User u;
u.setMember(new Base);
u.setMember(new Derived);
// ACHTUNG!! obige zwei Zeilen erzeugen ein Memory Leak, das ist ein Nachteil von dynamischen Objekten.
// Man muss sich um die Zerstörung selber kümmern, C++ kennt keinen Garbage Collector!
Oder um sicher zu gehen, dass das Objekt den aktuellen Scope überlebt.
Code: Alles auswählen
int& getInt() {
int ret = 10;
return ret;
}
// gibt eine Referenz auf ein Objekt zurück, das bei Verlassen von getInt() wieder zerstört wird -> ungültige Referenz!
// mit Zeigern kein Problem:
int* getIntPtr() {
int* ret = new int(10);
return ret;
}
uswusf. Mit der Zeit kriegst du schon raus, wann du mit Values, wann mit Referenzen und wann mit Zeigern arbeiten musst.