Warum Zeiger speichern
-
Ich habe von "kleinauf" (bin immer noch Anfänger) gelernt, in Projekten immer Zeiger auf Objekte zu speichern und nicht Objekte selbst, da diese besonders bei "größeren" Projekten später wichtig wird.
Aber warum ist das genau so? Wenn ich Personen in einem Array speichern will, warum lege ich ins Array Zeiger auf diese Objekte?
Im Speicher liegen dann ja die Zeiger und auch die Objekte auf welche die Zeiger zeigen. Bei einer statischen Implementierung lägen ja nur die Objekte direkt im Array/Vector/Liste oder wo auch immer ich diese speichere.
-
Wo hast du das gelernt? Es gibt Anwendungsgebiete für Zeiger, z.B. Polymorphie, die man in der Praxis oftmals erst, wenn überhaupt, bei größeren Projekten bekommt. Oder auch wenn man mehrere verschiedene Zugriffsarten auf Objekte braucht, was ebenfalls bedeutet, dass man komplexere Sachen macht.
-
Ich habe es so gelernt, es sich anzugewöhnen, da es bei kleinen Projekten nicht schadet und bei größeren extrem wichtig ist. Ich habs so mal in irgendeinem Tutorial aufgeschnappt.
Deinen ersten Punkt glaube ich ansatzweise zu verstehen. Mit virtual deklarierte Methoden, entscheiden erst zur Laufzeit des Programms welche Methode aufgerufen wird. Steckt der Vorteil dann in der Compilezeit??
Was kann ich unter verschiedenen Zugriffsarten verstehen? Dein zweiter Punkt wird mir leider nicht genau klar.
-
Ricko schrieb:
Deinen ersten Punkt glaube ich ansatzweise zu verstehen. Mit virtual deklarierte Methoden, entscheiden erst zur Laufzeit des Programms welche Methode aufgerufen wird. Steckt der Vorteil dann in der Compilezeit??
Nein, der Vorteil ist, dass es anders nicht geht.
Was kann ich unter verschiedenen Zugriffsarten verstehen? Dein zweiter Punkt wird mir leider nicht genau klar.
Ja, das ist eher exotisch. Du kannst zum Beispiel mehrere Indexlisten zu einer Objektliste führen, die dann nach unterschiedlichen Kriterien geordnet sind.
-
D.h. schon im einfachsten Falle einer Basisklasse Person and davon abgeleitete Klassen Schüler und Lehrer muss ich mit Zeigern arbeiten, wenn ich eine Methode Ausgabe in Schüler und Lehrer unterschiedlich "überschrieben" habe?
Bis jetzt war mir nicht bewusst, dass wenn ich virtual benutze zwangsläufig mit Zeigern arbeiten muss.
-
Bis jetzt war mir nicht bewusst, dass wenn ich virtual benutze zwangsläufig mit Zeigern arbeiten muss.
Musst Du auch nicht - mit Referenzen geht auch... die sind aber nicht kompatibel mit den Containern.
-
Kann der TE mal ein Beispiel zu dem was er meint schreiben? Denn ich sehe eigentlich wenig Sinn darin Zeiger zu nutzen, wenn einem Objekt ein anderes Objekt gehört.
-
Rohe Zeiger mit Besitz verwende ich nur, wenn sie ihr Objekte nicht besitzen. Ansonsten nehme ich meist Smart-Pointer oder Container, damit mir Speicherverwaltung abgenommen wird.
Aber davon abgesehen würde ich Zeiger nicht nur verwenden, "weil es in grösseren Projekten extrem wichtig ist". Kriterien für den Einsatz von Indirektionen (wie z.B. Zeiger) sind unter Anderem kleinere Abhängigkeiten (Pimpl-Idiom), Nicht-Kopierbarkeit oder Laufzeitpolymorphie.