effizientes c++ auch ohne zeiger??
-
Granini schrieb:
Funktioniert zwar wenn einem ein Alias reicht. Aber wenn man das Objekt klonen will hilft einem nur noch ein "new" weiter.
Oder gibt es eine Möglichkeit wie man das Problem ohne new lösen kann? Ich glaube aber nicht.
Wenn du Polymorphie brauchst und ein Objekt kopieren willst, ist
newschon naheliegend. Falls dir aber das Aufräumen zu mühsam ist, kannst du Smart Pointers verwenden. Und immer schön dran denken, Destruktor virtuell zu machen.
Aber Zeiger gehören nun mal zu C++. Wenn man sich für diese Programmiersprache entscheidet, nimmt man auch die Zeiger in Kauf. Sie bieten einem ausserdem sehr viele Möglichkeiten, auch wenn sie fehleranfällig sind. Man muss sie halt nicht exzessiv einsetzen, sondern wo möglich auf Container, Smart Pointer und andere Hilfsmittel ausweichen.
-
Ich könnte mir keine Programmierwelt ohne Zeiger vorstellen. Und damit meine ich auch die Fälle, in denen ich zwar selber keine benutze, aber weiß, dass die Klassen, die ich verwende, diese benutzen. Für mich würde es auch keinen Unterschied machen, wenn die Klassen zwar soetwas nicht betreiben würden, aber dafür die "Sprache" im Hintergrund. Ohne geht es einfach nicht. Nirgendwo. Man sollte aber bestrebt sein, die Verwendung von Zeigern so oft wie möglich gut getesteten Bibliotheken (oder halt "Sprachen") zu überlassen oder einfach keine Fehler machen

Ich denke, dass der TE auch eher wieder einen kleinen Krieg auslösen wollte, aber ich bin grad etwas angeschwipst, von daher lässt mich das kalt
-
Decimad schrieb:
Ich denke, dass der TE auch eher wieder einen kleinen Krieg auslösen wollte, aber ich bin grad etwas angeschwipst, von daher lässt mich das kalt


Es ist Montag Abend!?!Ich will gar nicht wissen, wie du Freitags drauf bist..

-
Dafür hab ich am Wochenende gewerkelt, ich bin da flexibel bei der Wahl des Abends, an dem ich mich mal gehen lasse

-
u_ser-l schrieb:
...Referenzen und C-Zeiger werden vom Compiler 1:1 auf Zeiger in Assembler umgesetzt - das Konzept, nämlich: die Adresse des eigentlich gemeinten Objekts zu speichern, ist dasselbe....
Auf der Ebene ist ALLES ein Zeiger. In ASM werden schließlich immer irgendwelche Speicheradressen herumgereicht und dahin entweder gelesen, geschrieben oder dahingesprungen....
Ich glaube nicht, dass ein derart philosophischer Ansatz vom OP gemeint ist, sondern dass er gerne Programme ohne new/delete (und ggf. ohne array-Zeigerarithmetik) schreiben möchte - und das ist sehr wohl möglich und sogar erstmal die Standardherangehensweise.
Gruß,
Simon2.
-
u_ser-l schrieb:
...blablabla...
Nuchts für ungut, aber durch das gebetsmühlenartige Wiederholen von von Falschaussagen, werden keine richtigen Aussagen daraus.
- )Der Standard schreibt nicht vor, ob eine Referenz Speicher belegt, oder nicht. Das heisst, der Standard schreibt auch nicht vor, ob sich hinter einer Referenz ein Zeiger verbirgt, oder nicht. Nur, weil viele Compiler es so machen, ist die Aussage Referenz==Zeiger trotzdem falsch. Deine Aussage ist, dass Referenzen 1:1 in Zeiger umgesetzt werden, ist damit ebenfalls falsch. Dies ist weder für triviale noch für komplexe Objekte zwangsläufig der Fall.
- )Referenzen müssen an valide Objekte gebunden sein, da sie ein )Aliasname für diese Objekte darstellen. Bei Zeigern ist das nicht der Fall.
- )Referenzen erlauben keine Zeigerarithmetik.
- )Referenzen dürfen keine Referenzen referenzieren. Ebensowenig dürfen Zeiger auf Referenzen zeigen. Man kann auch keine Arrays aus Referenzen bilden. Grund: siehe Punkt a.)
Simon2 schrieb:
Auf der Ebene ist ALLES ein Zeiger. In ASM werden schließlich immer irgendwelche Speicheradressen herumgereicht und dahin entweder gelesen, geschrieben oder dahingesprungen....
Stimmt auch nicht. Operationen auf Registern haben nichts mit Zeigern zu tun, sondern entsprechen dem Arbeiten mit Variablen.
Zum TO:
Es gibt, und das wurde ja auch schon gesagt, keinen Grund, Zeiger komplett zu vermeiden. Man sollte Zeiger dort einsetzen, wo es sinnvoll ist. Allerdings kann man durch die konsequente Benutzung von Referenzen und Containern Zeiger weitgehend vermeiden.Edit: Zeiger -> Referenzen (danke an asc).
-
Tachyon schrieb:
[*]Zeiger müssen an valide Objekte gebunden sein, da sie ein Aliasname für diese Objekte darstellen. Bei Zeigern ist das nicht der Fall.
Korrektur: "Referenzen" müssen...
Ansonsten gebe ich dir aber Recht. Mir ist - so fern es für die Verwendung unerheblich ist - auch egal, wie Compiler irgendetwas umsetzen.
cu André
-
Tachyon schrieb:
...
Simon2 schrieb:
Auf der Ebene ist ALLES ein Zeiger. In ASM werden schließlich immer irgendwelche Speicheradressen herumgereicht und dahin entweder gelesen, geschrieben oder dahingesprungen....
Stimmt auch nicht. Operationen auf Registern haben nichts mit Zeigern zu tun, sondern entsprechen dem Arbeiten mit Variablen.
...OK, meine ASM-Kenntnisse sind recht eingerostet.
Aber wieviel kann man denn überhaupt in Registern machen? Und muss man die nicht auch vorher (eben über einen "Zeiger") aus dem Speicher laden (zumindestens initial)?Gruß,
Simon2.
-
Simon2 schrieb:
OK, meine ASM-Kenntnisse sind recht eingerostet.
Aber wieviel kann man denn überhaupt in Registern machen? Und muss man die nicht auch vorher (eben über einen "Zeiger") aus dem Speicher laden (zumindestens initial)?Gruß,
Simon2.
Laden muss man schon irgendwie, aber für Arithmetik etc. braucht man keine Zeiger. Und Literale werden i.d.R. auch direkt geladen.
-
Tachyon schrieb:
...
Laden muss man schon irgendwie, aber für Arithmetik etc. braucht man keine Zeiger. Und Literale werden i.d.R. auch direkt geladen.Gut zu wissen.
Ich bin aber auch eher von "Objekthandling" ausgegangen und nicht nur von nativen Zahlen und Strings. Und mehr als das "Laden" (sprich new/delete) hat der OP an pointerspezifischem Zeug auch nicht genannt....
Nach meiner laienhaften Vermutung durchlaufen aktuelle Anwendungen zu 80% Operationen, die "Zeiger" verwenden....
Aber letztlich ist das hier philosophisch und wir beide sind uns wohl einig darin, dass der Ansatz von "user-I" überzogen und wenig hilfreich ist.
Gruß,
Simon2.