globale variable oder nicht?
-
hi
du koenntest z.b. ein singleton verwenden.
du koenntst deine 'globalen' variablen in eine struct tun, in deiner main initialisieren und nur eine referenz oder einen pointer weiter geben.
schlimmsten falls alles in eine struct und die in einem namespace als static zur verfuegung stellenMeep Meep
-
ach lol genau ich könnt sie in meiner main initialisieren und mit pointer dann von dort weitergeben, lol das ich da nicht draufgekommen bin

-
Meep Meep schrieb:
Antipattern
Und hier zurecht Antipattern genannt.
Flutscherino schrieb:
ach lol genau ich könnt sie in meiner main initialisieren und mit pointer dann von dort weitergeben, lol das ich da nicht draufgekommen bin

Hä? Wo ist jetzt der Unterschied?
Wenn du uns etwas mehr Informationen gibt, können wir dir vielleicht sogar eine schöne Lösung nennen.
-
jo eigentlich is es ganz simple, ich rufe von A -> B auf und definiere XY, dann von A -> C und in C ruf ich dann D auf wobei ich in D eben die XY brauche..
-
Wie wäre es mit Singletons?
-
Singleton_1 schrieb:
Wie wäre es mit Singletons?
Um welches Problem zu loesen?
-
Singleton_1 schrieb:
Wie wäre es mit Singletons?
Singletones werden überbewertet.
Flutscherino schrieb:
jo eigentlich is es ganz simple, ich rufe von A -> B auf und definiere XY, dann von A -> C und in C ruf ich dann D auf wobei ich in D eben die XY brauche..
void A() {XY xy = B(); C(xy);} XY B() {//erstelle XY und gebe XY zurück} void C(const XY& xy) {D(xy);} void D(const XY& xy) {//...}Hab ich das so richtig verstanden?
-
Funktion wird im deutschen mit "k" geschrieben. Variable ist ein Substantiv und wird groß geschrieben. Und "tu mal nicht das Projekt initialisieren", sondern "initialisiere das Programm". Und der Start ist auch ein Substantiv, wie auch die Zahl. Also statt "ich tu jetzt das Projekt einmal initialisieren beim start" heißt es richtig "Ich initialisiere das Programm jetzt ein mal beim Start".
-
Grundsätzlich sind globale Variablen nicht gut, aber Singletons sollte man ebenso mit vorsicht geniesen (Ich würde sie zwar nicht gänzlich verteufeln, aber allzu weit von globalen Variablen ist das Singleton nun auch nicht entfernt).
Die Verwendung von Parametern oder Klassenmembern ist in der Regel die bessere Wahl.
-
Singleton und globale Variablen sind zwei völlig orthogonale Konzepte. Das einzige was Singletons und globale Variablen gemeinsam haben ist, dass man praktisch immer, wenn man denkt, dass ein Singleton oder eine globale Variable angebracht wäre, falsch liegt; ganz besonders bei Singleton und ziemlich sicher auch in diesem Fall...
-
@besserwisser
Kann man bei dir Nachhilfe Unterricht im Fach Deutsch buchen?
(Könntest du eventuell meinen Satz oben etwas verbessern?)
-
Kellerautomat schrieb:
Singleton_1 schrieb:
Wie wäre es mit Singletons?
Um welches Problem zu loesen?
Zu wenige design patterns im Programm.
-
Flutscherino schrieb:
ich höre immerwieder das Globale Variablen schlecht sind, aber warum?
dot schrieb:
Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.
Zeig mir ein nicht-globales Singleton.
-
Nexus schrieb:
dot schrieb:
Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.
Zeig mir ein nicht-globales Singleton.
Zeig mir einen nicht strahlenden Kernreaktor. Die Tatsache, dass ein Singleton in der Regel einen globalen Zugriffspunkt bietet, ist lediglich eine Konsequenz, aber nicht der eigentliche Sinn des Pattern, eine unerwünschte Nebenwirkung, könnte man sagen...
-
Das stimmt, aber man kommt eben nicht ohne globale/statische Variablen aus, wenn man das klassische Singleton-Pattern implementiert. Andererseits sieht man oft den Fehler, dass jede Klasse, die nur einmal instanziiert wird, gleich zu einem Singleton gemacht wird. Bei Spielen z.B. die furchtbaren globalen Manager für alles :p
-
Nexus schrieb:
Andererseits sieht man oft den Fehler, dass jede Klasse, die nur einmal instanziiert wird, gleich zu einem Singleton gemacht wird.
Genau das ist der Punkt. Eine globale Variable ist eine Instanz eines Typs. Ein Singleton ist ein Typ, der nur einmal instanziert werden kann.
Auch wenn die übliche Implementierung eines Singleton in C++ einen globalen Zugriffspunkt auf diese eine Instanz impliziert, sind das imo immer noch zwei völlig unabhängige Konzepte, wie z.B. "Flugzeug" und "Urlaub" auch...
-
dot schrieb:
[...] sind das imo immer noch zwei völlig unabhängige Konzepte, wie z.B. "Flugzeug" und "Urlaub" auch...
ob Jürgen Wolf das auch so sieht?
class Flugzeug : public Urlaub {};*duckwundweg*
-
dot schrieb:
Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.
Sie mögen unterschiedliche Konzepte sein, doch wurden letztere in den Projekten in denen ich gearbeitet habe nicht selten für das gleiche verwendet. z.B. für das halten einer globalen Konfiguration (mit schönen Fehlereffekten wegen Abhängigkeiten und Linkreihenfolgen die sich geändert hatten)...
dot schrieb:
Das einzige was Singletons und globale Variablen gemeinsam haben ist, dass man praktisch immer, wenn man denkt, dass ein Singleton oder eine globale Variable angebracht wäre, falsch liegt; ganz besonders bei Singleton und ziemlich sicher auch in diesem Fall...
Bei globalen Variablen ist dies in der Regel ebenso falsch (Ich würde im Zweifel sogar ein Singleton vorziehen, da die Initialisierung hier "definierter" abläuft).
Ich verwende auch in Projekten vereinzelt Singletons, weil mir für den Anwendungsfall keine bessere Lösung eingefallen ist (Rechte zum Angemeldeten Benutzer, die in der Regel nur einmalig initialisiert werden, und an sehr vielen Programmstellen abgefragt werden; Ebenso nutzen wir das Application-Objekt von der VCL [Merkt sich u.a. die Aufrufparameter], das man sowohl als globale Variable als auch als Singleton umsetzen kann - vermutlich ist es ersteres, habe es aber nicht nachgeprüft).
-
Wir verwenden gerade für solche globalen Konfigurationen auch Singletons.
@asc Aus deiner Bemerkung dazu schließe ich, dass ihr dafür jetzt keine Singletons mehr verendet. Wie macht man es dann? Mir ist hier dazu nichts besseres als Singleton (oder eben globale Variable) eingefallen.
-
Ich würde globale Variablen einfach so verpacken und gut:
std::vector<Item>& globalItems() { static std::vector<Item> items; return items; }Solange man den globalen ZUgriff nur möglichst lokal verwendet und abkapselt, wo ist das Problem.