was ist der Nutzen der Pointer?
-
Kann mir das jemand erklären oder gute Verweise geben, wo es sinnvoll ist sie einzusetzen, bzw. wo es ohne sie nicht geht?
-
Es geht nicht ohne. Wenn du das sehen willst musst du nur mal etwas über Hello World hinausgehendes in C (oder auf die Mittel von C beschränkt) programmieren. In C++ gibt es allerdings viele hilfreiche Einrichtungen, die dafür sorgen, dass du auch ohne Pointer ziemlich weit kommst (Referenzen, Strings, Container, etc.)
-
In C++ ist der sinnvolle Bereich sehr eingeschränkt.
- Besitzende Zeiger (also Zeiger, die auf eine dynamisch angeforderte Resource verweisen, zb new/malloc) verpackt man als unique_ptr/shared_ptr und Konsorten.
- Möchte man Werte per Referenz übergeben dann gibt es hierfür in C++ Referenzen als Sprachmittel.
- Anstatt Zeiger für Werte zu verwenden, die null sein dürfen, kann man boost::optional verwenden. Wobei das mMn ein valides Einsatzgebiet für Zeiger ist.Aber wenn du zb eine verkettete Liste programmieren möchtest dann wirst du an Zeigern wohl nicht vorbeikommen.
Zeigerarithmetik ist auch in C++ noch heiß. (Iteratoren sind bei einigen Containern auch einfach nur Zeiger)
-
Ethon schrieb:
(...) Aber wenn du zb eine verkettete Liste programmieren möchtest dann wirst du an Zeigern wohl nicht vorbeikommen. (...)
Hallo Ethon,
kannst du mir eine solche verkettete Liste zeigen? bitte
-
kollja21 schrieb:
Hallo Ethon,
kannst du mir eine solche verkettete Liste zeigen? bitte
Vielleicht hilft Dir
http://www.tbi.univie.ac.at/~pmg/tutorials/tmp/vcppk/html/verkettete_liste.html
http://www.tbi.univie.ac.at/~pmg/tutorials/tmp/vcppk/html/die_klasse_stackaslinkedlist.html
-
kollja21 schrieb:
Ethon schrieb:
(...) Aber wenn du zb eine verkettete Liste programmieren möchtest dann wirst du an Zeigern wohl nicht vorbeikommen. (...)
Hallo Ethon,
kannst du mir eine solche verkettete Liste zeigen? bitte
std::list
std::forward_list- wozu braucht es da Zeiger?
-
Zeiger haben bei mir einen ganz anderen Nutzen, nämlich beim Export "C" von Funktionen in Libraries
-
Ich lehne mich mal ganz weit aus dem Fenster und behaupte: Zeiger braucht man in modernem C++ regelmäßig eigentlich nur noch für low-level Sachen wie der Umgang mit rohem Speicher, Selber implementieren von Containern usw. Dinge mit denen viele Programmierer gar nicht in Berührung kommen.
-
Zeiger zu verstehen und mit Zeigern umgehen zu können ist in meinen Augen eine der Grundvoraussetzungen für einen Programmierer.
Wofür du sie einsetzt ist wieder eine andere Geschichte.
Es gibt freundliche und eher unfreundliche Einsatzmöglichkeiten.
-
Was die Frage aufwirft, ab welchen Abstraktionslevel man sich Programmierer nennen darf?
-
Zeiger zu verstehen ist als C++ Programmierer schon sehr hilfreich undd oft notwendig, da die meisten reelen größeren C++ Programme irgendwo Zeiger verwenden. In neuem Code benutze ich aber praktisch keine Zeiger mehr.
-
TNA schrieb:
Zeiger zu verstehen ist als C++ Programmierer schon sehr hilfreich undd oft notwendig, da die meisten reelen größeren C++ Programme irgendwo Zeiger verwenden. In neuem Code benutze ich aber praktisch keine Zeiger mehr.
Naja, ich verwende sie beim Unique_ptr gerne noch um den Inhalt des unique_ptr an Consumer zu übergeben aber als Owner von Heap-Ressourcen verwende ich sie auch nicht mehr.
-
chp++ schrieb:
Naja, ich verwende sie beim Unique_ptr gerne noch um den Inhalt des unique_ptr an Consumer zu übergeben.
Ich gebe immer den unique_ptr weiter falls der Besitz übertragen werden soll und ansonsten Referenzen auf das Objekt.
-
chp++ schrieb:
Naja, ich verwende sie beim Unique_ptr gerne noch um den Inhalt des unique_ptr an Consumer zu übergeben aber als Owner von Heap-Ressourcen verwende ich sie auch nicht mehr.
Ein sinnvolles Anwendungsgebiet für nackte Pointer ist vielleicht noch eine Referenz eines Kindelements auf sein Elternelement wenn es keinerlei "shared ownership" gibt (Weak Pointer also keinen Sinn machen). Wenn die Kindelemente z.B. in einer Map im Elternelement gespeichert sind und deren Lebenszeit direkt mit der des Elernelements verknüpt ist.
Finnegan