Zeiger und Referenzen
-
mgaeckler schrieb:
gut in reinem C++ kann man/frau häufig auch auf Zeiger verzichten bzw. diese dann intern von einer Library verwenden lassen. Das kann dann aber unnötiger overkill sein.
RAII ist ein etabliertes Konzept in C++. Davon abweichender Mehraufwand wie manuelle Speicherverwaltung muss seine Rechtfertigung haben.
-
mgaeckler schrieb:
Das hängt meines Erachtens ganz vom Anwendungsfall ab. Die C++ Standardbibliothek hat einen höheren Abstraktionsgrad wie die von C. Das ist immer mit einem höheren Overhead verbunden. Den will man manchmal einfach nicht.
Falsch.
C versus C++ bitte nicht hier. Kannst die passenden Threads im C-Forum erweitern. Derzeit ist da sogar ein recht großer.
-
SeppJ schrieb:
Zeiger sind durch Referenzen quasi obsolet, ...
Bitte was?
Ich glaub da hat jemand SeppJs-Account gehackt...
Sowas kommt doch sicherlich nicht von einem Moderator...Ich verändere auch mal gerne Verweise auf Daten, was
ja (ohne Hacks) mit Referenzen nicht möglich ist.Außerdem kann man Referenzen nicht in (STL-)Containern speichern
und du gehörst ja wohl nicht zu den Leuten, die universell Smart-Pointer verwenden,
oder?Außerdem möchte man manchmal auch einfach 0 zurückliefern oder übergeben...
Gruß,
XSpilleEDIT: Ich gebe dir jedoch Recht, dass man für Übergabe-Parameter und Rückgabe-
Parameter (wesentlich) häufiger Referenzen verwendet.
-
Irgendwie scheinst du einen völlig anderen Programmierstil als ich zu haben, ich habe jedenfalls nie die Notwendigkeit dafür. Warum sollte ich einen Verweis umhängen wollen? Verlasse den Scope der Referenz und mach eine neue. Warum sollte ich 0 zurückgeben wollen, außer bei extrem low-level Sachen? Warum wollte ich Pointer/Referenzen in Container speichern (außer Polymorphie)? Speicher konkrete Objekte oder Iteratoren.
-
(außer Polymorphie)?
Das ist doch aber schon nen ziemlich wichtiges Thema ?
Denk bei jedem Projekt was ueber mehr als ne handvoll source dateien hinausgeht und mehr als 1 Entwickler beteiligt ist, ist Polymorphie(Interfaces) nen Zentrales Thema!Also ich verwend scho "viel" Zeiger
Aber meist auch nur in Verbindung mit Interfaces (Protokollklassen) und PIMPL.
bei mir iss ca. jede 4. Klasse ne pure abstract Klasse (Interface).
und ich verwend auch selten new (eigentlich nur bei PIMPL + ObjectFactories).Meine Meinung:
Wenn wer nen C++ Programm schreibt, ohne obige Themen, also ganz ohne new und Zeiger und und und ... Ist zwar auf der einen Seite Ideal, auf der anderen aber kein typischer C++ Anwendungsfall. Meist hat man eben kein "Hello World" Szenario. In so einem Falle sollt man echt ueberlegen ob c++ ueberhaupt die richtige Sprache fuer das problem waer.Ciao ...
-
SeppJ schrieb:
Irgendwie scheinst du einen völlig anderen Programmierstil als ich zu haben, ich habe jedenfalls nie die Notwendigkeit dafür.

SeppJ schrieb:
Warum sollte ich einen Verweis umhängen wollen?
Bei einer einfachen setter-Funktion mit nicht-POD.
SeppJ schrieb:
Verlasse den Scope der Referenz und mach eine neue.
Als Member-Variable kannst du den Scope nur schwer verlassen

SeppJ schrieb:
Warum sollte ich 0 zurückgeben wollen, außer bei extrem low-level Sachen?
Abstrakt ausgedrückt: Bei optionalen Attributen für ein Objekt.
SeppJ schrieb:
Warum wollte ich Pointer/Referenzen in Container speichern (außer Polymorphie)? Speicher konkrete Objekte oder Iteratoren.
Zur Vermeidung unnötiger Kopien (Komplexität der Objekte).
Nicht jeder Objekt-Typ muss einen Copy-Constructor haben.Gruß,
XSpille
-
XSpille schrieb:
SeppJ schrieb:
Warum sollte ich einen Verweis umhängen wollen?
Bei einer einfachen setter-Funktion mit nicht-POD.
Was hat dies bitte mit POD oder nicht POD zu tun?
@SeppJ,
Mich stört an deiner Aussage irgendwie das Wort "obsolet". Das ist in meinen Augen etwas übertrieben. Referenzen übernehmen sicher einen grossen Bereich, wo man in C Zeiger einsetzt, aber alles können sie nicht schlucken und deshalb sind Zeiger nicht obsolet.Grüssli
-
Dravere schrieb:
XSpille schrieb:
SeppJ schrieb:
Warum sollte ich einen Verweis umhängen wollen?
Bei einer einfachen setter-Funktion mit nicht-POD.
Was hat dies bitte mit POD oder nicht POD zu tun?
Ich meinte "Einfach-zu-kopierendes-Objekt"...
Keine tiefen Strukturen...Die Aussage war allerdings irreführend und falsch, gebe ich dir Recht.
-
Wie sieht so ein Setter konkret bei dir aus?
-
SeppJ schrieb:
Warum sollte ich einen Verweis umhängen wollen?
Fällt dir da wirklich nichts ein?

Wenn du zum Beispiel eine Klasse hast, die gewisse Daten nicht selbst besitzt, sondern extern referenziert, ist es oft sehr hilfreich, den Verweis ändern zu können.Ship::SetTarget(Ship& target);SeppJ schrieb:
Verlasse den Scope der Referenz und mach eine neue.
Wie ist das zu verstehen, bzw. wie führt das am Zeiger-Umhängen vorbei? Man kann den Scope meist nicht einfach so verlassen.
SeppJ schrieb:
Warum sollte ich 0 zurückgeben wollen, außer bei extrem low-level Sachen?
Um einen Nicht-Vorhanden/Nicht-Gültig-Status kennzuzeichnen. Zum Beispiel für eine Suchfunktion. Oder für
Ship* Ship::GetTarget() const; // NULL wenn kein Ziel anvisiertSeppJ schrieb:
Warum wollte ich Pointer/Referenzen in Container speichern (außer Polymorphie)?
Observer Pattern ist so ein Anwendungsfall. Es kann auch sein, dass nur Objekte gleichen Typs benachrichtigt werden, dann ist keine Polymorphie nötig.
Ich bin auch der Meinung, du bist zu stark abgeneigt gegenüber Zeigern. Ich würde mich ohne sie ziemlich eingeschränkt fühlen. Smart muss nur sein, was besitzend ist. Referenzen können zu wenig, um den Zeigern in den übrig gebliebenen Fällen das Wasser zu reichen.