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
TigerClaw25
unregistriert
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Das sind allerdings weder Argumente, noch gute Gründe zur Verwendung von Singletons.Zum Thema Singletons könnte man sicher auch normale Klassen verwenden. Aber Zum einen benötigst du lediglich ein Objekt von jeder Klasse und zweitens kannst du diese überall verwenden bzw aufrufen, ohne irgendwas global zu halten oder mit "extern" zu arbeiten.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (08.04.2013, 13:01)
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Nun stellen sich mir aber einige Fragen zum guten Programmier-Stil, vor allem was Zeiger, Referenzen und Co betrifft. Da das in Java überhaupt keine Rolle spielt, bin ich mir etwas unsicher.
Wann Zeiger benutzen?
In Java ist es ja ganz einfach: Eingebaute Datentypen wie int werden einfach initialisiert (int zahl = 3; ), Instanzen von Klassen werden immer mit new erzeugt (Entity entity = new Entity(); ).
In C++ habe ich nun zwei verschiedene Möglichkeiten eine Instanz zu erzeugen: "Normal" (Entity entity; ) oder mit new (Entity *entity = new Entity). Außerdem gibts drei verschiedene Möglichkeiten, Variablen als Parameter zu übergeben (Normal, Zeiger, Referenz). Das ist noch etwas verwirrend für mich, wann welche Technik zum Einsatz kommen sollte.
Zufällig bin ich auf diese Folien gestoßen, die bei jemandem hier aus dem Forum in der Signatur verlinkt waren: http://dl.dropbox.com/u/6101039/Modern%20C%2B%2B.pdf
So wie ich das verstehe, wird dort generell von der Verwendung von Zeigern abgeraten. Warum? Sollte ich einfach immer die "normale" Instanziierung benutzen? Und was genau sind diese shared_pointer bzw unique_pointer?
Init-Funktionen?
In dem SDL-Beispiel benutzt der Autor überall Init-Funktionen, die sofort nach dem Erstellen des Objekts aufgerufen werden. Was ist der Sinn dahinter? Ich würde sowas in Java immer im Konstruktor erledigen. Gibt's dafür in C++ einen besonderen Grund? Soll das guter Stil sein oder ist das schlicht Unsinn?
Singletons?
Hat jetzt eigentlich nichts mit C++ zu tun, sondern allgemein mit Programmier-Stil. Der Autor verwendet im SDL-Beispiel zwei Singleton-Klassen: Timer und Framework. Ich denke, man könnte beide auch als normale Klassen implementieren. Oder spricht was dagegen?
Ich hätte einfach gerne ein paar Meinungen dazu!
Wahlweise kommt man um Pointer nicht gut herum, wenn man Objekte non-copyable machen will oder muss.
In Java ist doch praktisch alles ein Zeiger!?
Bei den Folien geht es nicht darum, das kein new benutzt wird. In fast jedem der Beispiele mit new geht es darum, das ein new weiterhin ausgefuehrt wird aber irgendwo in der Standard Bibliothek versteckt ist.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Danke für die Antworten!
Wahlweise kommt man um Pointer nicht gut herum, wenn man Objekte non-copyable machen will oder muss.
Das versteh ich nicht ganz. Inwiefern wird durch die Benutzung von Pointern ein Objekt non-copyable?
In Java ist doch praktisch alles ein Zeiger!?
Ja klar, aber du weißt sicher was ich meine
In Java kümmert man sich nicht selbst um Speicherreservierung und co. Und man hat auch gar nicht die Wahl zwischen Stack und Heap.
Bei den Folien geht es nicht darum, das kein new benutzt wird. In fast jedem der Beispiele mit new geht es darum, das ein new weiterhin ausgefuehrt wird aber irgendwo in der Standard Bibliothek versteckt ist.
Ok, wenn ich das richtig verstanden habe, dann könnte ich für mich folgende Regeln aufstellen:
* Instanzen grundsätzlich auf dem Stack erzeugen.
* Nur wenn es nicht anders geht, new benutzen.
* Wenn ich new benutze, am Besten shared oder unique pointer benutzen (je nachdem wo ich den pointer überall brauche), damit ich mich um die ordnungsgemäße Freigabe nicht selbst kümmern muss.
unique_ptr ist das Mädchen für alles, shared_ptr ist für den sehr seltenen Spezialfall gedacht, dass ein Objekt mehr als einen Besitzer hat.
Werbeanzeige