Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

11

12.04.2010, 20:56

@FalkT
Es ging ihm ja genau darum, dass er da noch etwas haben kann, was auf kein Objekt zeigt. Macht imo schon Sinn. Ob das da viel Sinn macht ist fragwürdig, aber ich benutze ähnliche Sachen und finde das eigentlich eine ganz gute Lösung, wenn man einen solches Objekt explizit will.

Z.B. Kann eine Klasse, die ein Auto darstellt einen Zeiger auf den aktuellen Fahrer haben, welcher natürlich nicht unbedingt vorhanden ist und daher kann man da den Zeiger auf 0 setzen. Man könnte natürlich auch einfach ein dummy Objekt erstellen, auf welches der Zeiger zeigen kann, aber das finde ich nicht wirklich besser.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

12

12.04.2010, 21:24

Aber Nexus, nach dem löschen sollte man den Pointer doch auf null setzen, da sonst jeder Nullpointer-check wirkungslos bleibt, man aber trotzdem auf gelöschten Speicherplatz zugreift ?!

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

13

12.04.2010, 21:28

das macht im ersten fall keinen sinn weil der zeiger danach auch gleich gelöscht wird. das fand im destruktor statt.

zweites beispiel: wenn man ihm seine richtige adresse in dem moment nicht zuweisen sollte man auf NULL setzen. oO

safedelete ist sowieso blödsinn^^ da fehlt übrigens noch ne überflüssige if-verzweigung xDD
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

14

12.04.2010, 21:54

Aber Nexus, nach dem löschen sollte man den Pointer doch auf null setzen, da sonst jeder Nullpointer-check wirkungslos bleibt, man aber trotzdem auf gelöschten Speicherplatz zugreift ?!
Ja, Nullsetzen ist nicht von vornherein schlecht.

Mir kommt es manchmal nur so vor, als würde zu wenig über Objekt-Gültigkeit nachgedacht. Nullzeiger sind der Einfachheit halber erlaubt, man prüft dann eben vor jedem Zugriff auf Null. Jedoch ist es in vielen Fällen so, dass die Erzwingung eines gültigen Werts von der Programmlogik viel sinnvoller wäre. Referenzen sind nicht immer eine Alternative, z.B. wenn manuelle Speicherverwaltung im Spiel ist (was aber sehr selten vorkommen sollte) oder wenn der Zeiger sich während der Lebenszeit ändern kann.

Was ich sagen will: Zeiger können in vielen Situationen ohne Null verwendet werden. Regeln wie "ungültige Zeiger immer sofort auf Null setzen" sind zwar für Anfänger hilfreich, können sich jedoch durchaus negativ auf den Code auswirken. Und zwar nicht nur, was Codegrösse und Performance angeht: Viel wichtiger ist eine einfach und sauber strukturierte Logik, vor allem im Bezug auf Erweiterbarkeit und Wartung. Wenn ein Zeiger gültig sein muss, entfallen Spezialbehandlungen und Basteleien, um auf ungültige Zeiger halbwegs sinnvoll zu reagieren.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

15

12.04.2010, 22:01

wenn ich das so lese wirds mir klar.
ich glaub das entwickelt sich bei jedem programmierer von allein.
da es sich hier um einen anfänger handelt ist es gar nicht so schlecht. sobald seine erfahrung ein gewisses niveau erreicht wird er diese anfängertipps hinterfragen und mit überflüssigen null-zuweisungen aufhören.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

16

12.04.2010, 22:03

Aber Nexus, nach dem löschen sollte man den Pointer doch auf null setzen, da sonst jeder Nullpointer-check wirkungslos bleibt, man aber trotzdem auf gelöschten Speicherplatz zugreift ?!

mfg CBenni::O

Es geht mehr darum, dass man eher vermeidet solche Zeiger zu haben. Ressourcen werden per RAII verwaltet, alles andere ist eigentlich Unsinn. Und da brauchst du solche checks nicht, denn, wenn die Ressource nicht gültig ist, dann lebt das automatische Objekt ebenfalls nicht mehr.

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

17

17.04.2010, 21:38

Ein Argument für Zeiger anstatt Referenzen sind die Basisklassenzeiger, oder gibts auch Basisklassenreferenzen?
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

18

17.04.2010, 22:13

oder gibts auch Basisklassenreferenzen?
Ja, gibts. ;)
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

Alyx

Treue Seele

Beiträge: 236

Wohnort: Hannover

Beruf: Head Of Software Development

  • Private Nachricht senden

19

18.04.2010, 01:49

Das sind doch eigentlich schon Anti-Pattern für Pointer.
Denn in deinem Anwendungsfall(Funktions-Parameter) ist nicht ersichtlich, warum keine Referenzen ausreichen.

@Matze Deswegen mach dir den Unterschied zwischen Pointern und Referenzen klar und benutze, wenn es geht const-Referenzen bei Funktionsparametern.

Das Beispiel von Alyx ist typische Praxis. Doch leider sehr schlechter Code. Sowas sollte man sich auf keinen Fall angewöhnen.
Außerdem führ das Überprüfen auf NULL-Pointer stillschweigend einen zusätzlichen Objekt-Zustand ein, nämlich "nicht-initialisiert". Das erspart man sich mit Referenzen.
Klingt für mich stark nach einem Trauma vom Informatik-LK-Nachhilfe-Kurs, wenn du tatsächlich glaubst, was du dort schreibst.
Und natürlich war es "schlechter Code", es war ja auch ein Pseudo-Code-Beispiel... Leute gibts...

LG
Alyx

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

20

18.04.2010, 11:40

oder gibts auch Basisklassenreferenzen?
Ja, gibts. ;)


Ok, das ist mir neu ;)
Wieder was gelernt ;)
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

Werbeanzeige