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

1

12.03.2014, 11:37

Was ist die Cpp-Design-Entsprechung von Nullpointern

Hallo,

der Titel ist vielleicht nicht der aussagekräftigste, aber mir fällt keine besserer ein. Es geht darum, alten C-Code in sauberen und cpp-konformen Code zu übersetzen. Dort wird dann oft so was gemacht wie Pointer an eine Funktion übergeben und eine Fallunterscheidung gemacht, sofern der Parameter NULL aka. ungültig ist.
Wenn man hier jetzt Referenzen oder Kopien nimmt, müssen die ja mit irgendwas initialisiert sein. Behält man in dem Fall das Pointer-Konstrukt einfach bei, weil es einfacher und intuitiver ist oder lässt man sich da ein "Ungültig-Objekt" einfallen? Wie sähe das aber z.B. für nen simplen Vektor aus? Gibts vielleicht noch eine ganz andere Variante?

2

12.03.2014, 12:37

Für solche Fälle nimmt man auch weiterhin Zeiger.

Referenzen kannst du schwer vergleichen, weil der Address-of-Operator der referenzierten Typen möglicherweise überladen oder nicht öffentlich sein könnte (das kann man umgehen, aber nur durch zusätzliche Abhängigkeiten).

Zombie-Objekte, die "ungültig" darstellen, haben so unintuitive Konsequenzen wie, dass man sie nicht in Headern deklarieren darf und sie der Funktion eine zusätzliche Abhängigkeit einhandeln würden, die Platz für nichts verschwendet.

Nullzeiger zu prüfen ist hingegen einfach, berechenbar, und effizient. (Selbst dynamic_cast in der Zeigervariante nutzt nullptr als Signal, und das ist ja eindeutig C++.)

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

12.03.2014, 12:40

nullptr
exceptions

Aber anstatt immer exceptions zu schmeißen wenn ein Wert ungültig ist gebe ich in Funktionen auch teilweise Werte zurück, wenns Sinn macht.

4

12.03.2014, 12:54

Soweit ich das verstanden habe, geht es hier darum, bestimmte Parameter zwecks Fallunterscheidung optional zu machen und wie genau das in C++ aussehen würde. Bitte korrigieren, falls ich mich irre.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

12.03.2014, 12:54

null ist in vielen Fällen kein ungültiger Wert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

6

12.03.2014, 15:55

Es gibt doch nur zwei Fälle in denen man einen Zeiger anstelle einer Referenz übergibt. Wenn das Objekt auf dem Heap gespeichert ist und der Besitz übergeben wird oder wenn ein Parameter optional sein soll. Ansonsten kann man eigentlich immer eine Referenz bzw. Kopie verwenden.
"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?

Werbeanzeige