<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[globale variable oder nicht?]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>Ich habe immer wieder mühe mit Variablen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ich höre immerwieder das Globale Variablen schlecht sind, aber warum?</p>
<p>Ich habe hier ein Problemchen.. ich versuchs mal einfach darzustellen mit pseudocode:</p>
<pre><code class="language-cpp">function initialisieren () {
lese zahl 5 aus datei XYZ und speicher in variable XY
}
</code></pre>
<p>nun habe ich ein function die ...:</p>
<pre><code class="language-cpp">function run () {
XY ist gleich ? 
}
</code></pre>
<p>ich tu jetzt das Projekt einmal initialisieren beim start, aber ich möchte natürlich nicht immer wieder diese zahl aus der Datei rauslesen und in die Variable XY speichern, sondern würds gern einfach einmal machen beim start und dann diese Variable in der Funktion &quot;run&quot; immer wieder zur Verfügung haben.. ich wüsste zwar das es mit globalen variablen ginge, aber dieses Problem wie oben beschrieben trifft eben noch viel zu, und irgendwie hab ich im Kopf einfach verankert das ich globale variablen meiden sollte... gibt es da ne bessere Lösung als globale Variablen?</p>
<p>Vielen Dank für die Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307894/globale-variable-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 23:56:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307894.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Sep 2012 07:03:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 07:03:42 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>Ich habe immer wieder mühe mit Variablen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ich höre immerwieder das Globale Variablen schlecht sind, aber warum?</p>
<p>Ich habe hier ein Problemchen.. ich versuchs mal einfach darzustellen mit pseudocode:</p>
<pre><code class="language-cpp">function initialisieren () {
lese zahl 5 aus datei XYZ und speicher in variable XY
}
</code></pre>
<p>nun habe ich ein function die ...:</p>
<pre><code class="language-cpp">function run () {
XY ist gleich ? 
}
</code></pre>
<p>ich tu jetzt das Projekt einmal initialisieren beim start, aber ich möchte natürlich nicht immer wieder diese zahl aus der Datei rauslesen und in die Variable XY speichern, sondern würds gern einfach einmal machen beim start und dann diese Variable in der Funktion &quot;run&quot; immer wieder zur Verfügung haben.. ich wüsste zwar das es mit globalen variablen ginge, aber dieses Problem wie oben beschrieben trifft eben noch viel zu, und irgendwie hab ich im Kopf einfach verankert das ich globale variablen meiden sollte... gibt es da ne bessere Lösung als globale Variablen?</p>
<p>Vielen Dank für die Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249520</guid><dc:creator><![CDATA[Flutscherino]]></dc:creator><pubDate>Sat, 08 Sep 2012 07:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 07:10:36 GMT]]></title><description><![CDATA[<p>Und warum kannst du der run() Funktion (der man vielleicht einen etwas sprechenderen Namen geben sollte..) den Wert nicht einfach als Parameter übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249521</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 08 Sep 2012 07:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 07:34:22 GMT]]></title><description><![CDATA[<p>jo das könnt ich, aber was ist wenn ich run aufrufe aus einer anderen funktion? von daher werd ich z.b. beim start des Programmes ruf ich die initialisieren funktion auf, und später dann run immerwieder... dann müsst ich ja variablen die gnaze zeit rumschieben?</p>
<p>wäre das inteligenter als globale variablen? ich könnt schon die ganze zeit variablen rumschaufeln, aber naja... mit der zeit sind es dann doch relativ viele variablen die ich da rumschaufeln muss..? (jenachdem wie gross das programm wird..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249524</guid><dc:creator><![CDATA[Flutscherino]]></dc:creator><pubDate>Sat, 08 Sep 2012 07:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 07:51:29 GMT]]></title><description><![CDATA[<p>hi</p>
<p>du koenntest z.b. ein singleton verwenden.<br />
du koenntst deine 'globalen' variablen in eine struct tun, in deiner main initialisieren und nur eine referenz oder einen pointer weiter geben.<br />
schlimmsten falls alles in eine struct und die in einem namespace als static zur verfuegung stellen</p>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249526</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Sat, 08 Sep 2012 07:51:29 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 08:03:08 GMT]]></title><description><![CDATA[<p>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 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249527</guid><dc:creator><![CDATA[Flutscherino]]></dc:creator><pubDate>Sat, 08 Sep 2012 08:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 11:33:06 GMT]]></title><description><![CDATA[<p>Meep Meep schrieb:</p>
<blockquote>
<p>Antipattern</p>
</blockquote>
<p>Und hier zurecht Antipattern genannt.</p>
<p>Flutscherino  schrieb:</p>
<blockquote>
<p>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 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Hä? Wo ist jetzt der Unterschied?<br />
Wenn du uns etwas mehr Informationen gibt, können wir dir vielleicht sogar eine schöne Lösung nennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249541</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 08 Sep 2012 11:33:06 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Sat, 08 Sep 2012 18:25:37 GMT]]></title><description><![CDATA[<p>jo eigentlich is es ganz simple, ich rufe von A -&gt; B auf und definiere XY, dann von A -&gt; C und in C ruf ich dann D auf wobei ich in D eben die XY brauche..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249613</guid><dc:creator><![CDATA[Flutscherino]]></dc:creator><pubDate>Sat, 08 Sep 2012 18:25:37 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 00:15:46 GMT]]></title><description><![CDATA[<p>Wie wäre es mit Singletons?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250136</guid><dc:creator><![CDATA[Singleton_1]]></dc:creator><pubDate>Tue, 11 Sep 2012 00:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 01:16:15 GMT]]></title><description><![CDATA[<p>Singleton_1 schrieb:</p>
<blockquote>
<p>Wie wäre es mit Singletons?</p>
</blockquote>
<p>Um welches Problem zu loesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250140</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Tue, 11 Sep 2012 01:16:15 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 02:15:00 GMT]]></title><description><![CDATA[<p>Singleton_1 schrieb:</p>
<blockquote>
<p>Wie wäre es mit Singletons?</p>
</blockquote>
<p>Singletones werden überbewertet.</p>
<p>Flutscherino schrieb:</p>
<blockquote>
<p>jo eigentlich is es ganz simple, ich rufe von A -&gt; B auf und definiere XY, dann von A -&gt; C und in C ruf ich dann D auf wobei ich in D eben die XY brauche..</p>
</blockquote>
<pre><code class="language-cpp">void A() {XY xy = B(); C(xy);}
XY B() {//erstelle XY und gebe XY zurück}
void C(const XY&amp; xy) {D(xy);}
void D(const XY&amp; xy) {//...}
</code></pre>
<p>Hab ich das so richtig verstanden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250142</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Tue, 11 Sep 2012 02:15:00 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 08:01:10 GMT]]></title><description><![CDATA[<p>Funktion wird im deutschen mit &quot;k&quot; geschrieben. Variable ist ein Substantiv und wird groß geschrieben. Und &quot;tu mal nicht das Projekt initialisieren&quot;, sondern &quot;initialisiere das Programm&quot;. Und der Start ist auch ein Substantiv, wie auch die Zahl. Also statt &quot;ich tu jetzt das Projekt einmal initialisieren beim start&quot; heißt es richtig &quot;Ich initialisiere das Programm jetzt ein mal beim Start&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250161</guid><dc:creator><![CDATA[besserwisser]]></dc:creator><pubDate>Tue, 11 Sep 2012 08:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 11:10:35 GMT]]></title><description><![CDATA[<p>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).</p>
<p>Die Verwendung von Parametern oder Klassenmembern ist in der Regel die bessere Wahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250237</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 11 Sep 2012 11:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 11:22:50 GMT]]></title><description><![CDATA[<p>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...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250242</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 11 Sep 2012 11:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 11:38:41 GMT]]></title><description><![CDATA[<p>@besserwisser<br />
Kann man bei dir Nachhilfe Unterricht im Fach Deutsch buchen?<br />
(Könntest du eventuell meinen Satz oben etwas verbessern?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250245</guid><dc:creator><![CDATA[Erkenner der Hobby Lehrer]]></dc:creator><pubDate>Tue, 11 Sep 2012 11:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 19:58:17 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Singleton_1 schrieb:</p>
<blockquote>
<p>Wie wäre es mit Singletons?</p>
</blockquote>
<p>Um welches Problem zu loesen?</p>
</blockquote>
<p>Zu wenige design patterns im Programm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250457</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 11 Sep 2012 19:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 20:23:50 GMT]]></title><description><![CDATA[<p>Flutscherino schrieb:</p>
<blockquote>
<p>ich höre immerwieder das Globale Variablen schlecht sind, aber warum?</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/p1904093#1904093" rel="nofollow">Begründung</a></p>
<p>dot schrieb:</p>
<blockquote>
<p>Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.</p>
</blockquote>
<p>Zeig mir ein nicht-globales Singleton.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250462</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 11 Sep 2012 20:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 20:48:05 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.</p>
</blockquote>
<p>Zeig mir ein nicht-globales Singleton.</p>
</blockquote>
<p>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...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250465</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 11 Sep 2012 20:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 21:05:52 GMT]]></title><description><![CDATA[<p>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</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250469</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 11 Sep 2012 21:05:52 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Tue, 11 Sep 2012 21:49:24 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Andererseits sieht man oft den Fehler, dass jede Klasse, die nur einmal instanziiert wird, gleich zu einem Singleton gemacht wird.</p>
</blockquote>
<p>Genau das ist der Punkt. Eine globale Variable ist eine Instanz eines Typs. Ein Singleton ist ein Typ, der nur einmal instanziert werden <em>kann</em>.<br />
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. &quot;Flugzeug&quot; und &quot;Urlaub&quot; auch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250474</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 11 Sep 2012 21:49:24 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 07:15:40 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>[...] sind das imo immer noch zwei völlig unabhängige Konzepte, wie z.B. &quot;Flugzeug&quot; und &quot;Urlaub&quot; auch...</p>
</blockquote>
<p>ob Jürgen Wolf das auch so sieht?</p>
<pre><code class="language-cpp">class Flugzeug : public Urlaub
{};
</code></pre>
<p>*duckwundweg*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250495</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Wed, 12 Sep 2012 07:15:40 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 07:28:52 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.</p>
</blockquote>
<p>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)...</p>
<p>dot schrieb:</p>
<blockquote>
<p>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...</p>
</blockquote>
<p>Bei globalen Variablen ist dies in der Regel ebenso falsch (Ich würde im Zweifel sogar ein Singleton vorziehen, da die Initialisierung hier &quot;definierter&quot; abläuft).</p>
<p>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).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250498</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 12 Sep 2012 07:28:52 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 08:08:19 GMT]]></title><description><![CDATA[<p>Wir verwenden gerade für solche globalen Konfigurationen auch Singletons.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a> 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.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250513</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 12 Sep 2012 08:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 08:17:36 GMT]]></title><description><![CDATA[<p>Ich würde globale Variablen einfach so verpacken und gut:</p>
<pre><code class="language-cpp">std::vector&lt;Item&gt;&amp; globalItems()
{
   static std::vector&lt;Item&gt; items;
   return items;
}
</code></pre>
<p>Solange man den globalen ZUgriff nur möglichst lokal verwendet und abkapselt, wo ist das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250515</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 12 Sep 2012 08:17:36 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 08:55:51 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Singleton und globale Variablen sind zwei völlig orthogonale Konzepte.</p>
</blockquote>
<p>Sie mögen unterschiedliche Konzepte sein, doch wurden letztere in den Projekten in denen ich gearbeitet habe nicht selten für das gleiche verwendet.</p>
</blockquote>
<p>Naja, das machts aber eben noch lange nicht gut oder richtig...</p>
<p>asc schrieb:</p>
<blockquote>
<p>Bei globalen Variablen ist dies in der Regel ebenso falsch (Ich würde im Zweifel sogar ein Singleton vorziehen, da die Initialisierung hier &quot;definierter&quot; abläuft).</p>
</blockquote>
<p>Wenn ich einfach nur wohldefinierte Initialisierungsreihenfolge brauch, dann kann ich auch einfach eine normale Funktion machen, die das entsprechende Objekt in Form einer statischen Variable instanziert und eine Referenz drauf zurückgibt, ich seh nicht, wieso genau da automatisch das Singleton Pattern benötigt würde!?</p>
<p>asc schrieb:</p>
<blockquote>
<p>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).</p>
</blockquote>
<p>So ein Application Objekt wäre imo evtl. sogar einer der seltenen Fälle, wo man tatsächlich drüber diskutieren könnte, ob das Singleton Pattern dabei angebracht wäre, da man es hier ausnahmsweise wirklich mit etwas zu tun hat, das zu seiner wesentlichen Eigenschaft hat, dass es nur einmal existiert.</p>
<p>asc schrieb:</p>
<blockquote>
<p>z.B. für das halten einer globalen Konfiguration (mit schönen Fehlereffekten wegen Abhängigkeiten und Linkreihenfolgen die sich geändert hatten)...</p>
</blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Wir verwenden gerade für solche globalen Konfigurationen auch Singletons.</p>
</blockquote>
<p>Und mit genau welcher Begründung? Wieso genau muss um jeden Preis sichergestellt werden, dass die entsprechenden Typen hier und jetzt, für alle Zeit und überhaupt niemals je mehr als genau einmal instanziert werden? So lange du dafür kein Argument hast, hast du keinen Grund um einen Typen zu einem Singleton zu machen. Zugegeben, eine applikationsweite Konfiguration ist unter Umständen ein Grenzfall, wo man dafür und dagegen argumentieren kann und wo man auch nicht so oft tatsächlich ein Problem mit dem Singleton bekommen wird. Imo ist ein Singleton allerdings keine schöne Lösung.</p>
<p>Dass die Wiederverwendbarkeit von Code voller versteckter globaler Abhängigkeiten praktisch Null ist, ist euch bewusst, nehm ich mal an!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250523</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 12 Sep 2012 08:55:51 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 08:53:27 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Sie mögen unterschiedliche Konzepte sein, doch wurden letztere in den Projekten in denen ich gearbeitet habe nicht selten für das gleiche verwendet.</p>
</blockquote>
<p>Naja, das machts aber eben noch lange nicht gut oder richtig...</p>
</blockquote>
<p>Stimmt.</p>
<p>Aber wenn man davon absieht, das ein Singleton global nur eine Instanz hält, sehe ich dennoch nur wenige Unterschiede zwischen globalen Variablen, Singletons und Funktionen die eine statische Variable zurückliefert. Von den Grundprinzip hat man bei allen 3 Ansätzen ähnliche Anforderungen: Zugriff von mehreren Stellen auf einen bestimmten Kontent, der zur Laufzeit erhalten bleibt.</p>
<p>dot schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>z.B. für das halten einer globalen Konfiguration (mit schönen Fehlereffekten wegen Abhängigkeiten und Linkreihenfolgen die sich geändert hatten)...</p>
</blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Wir verwenden gerade für solche globalen Konfigurationen auch Singletons.</p>
</blockquote>
<p>Und mit genau welcher Begründung? Wieso genau muss um jeden Preis sichergestellt werden, dass die entsprechenden Typen hier und jetzt und für alle Zeit jemals nie mehr als einmal instanziert werden?</p>
</blockquote>
<p>In unseren Programm gibt es bezogen auf eine Programminstanz genau _einen_ Benutzer, mit seinen Rechten und benutzerspezifischen Einstellungen; Bei der Programmkonfiguration sieht es ähnlich aus. Nenn mir hier den Grund warum man unbedingt mehrere Instanzen braucht.</p>
<p>Ob ich hier eine Funktion mit statischer Variable oder ein Singleton anbiete nimmt sich für mich überhaupt nichts. Ein Singleton ist auch nichts anderes als eine statische Variable, wenn gleich die Schnittstelle per se nur eine Instanz anbietet.</p>
<p>Davon abgesehen gibt es auch Singletons die zwar eine Instanz eines bestimmten Typs halten, der Typ als solches aber seperat instanziert werden kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250529</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 12 Sep 2012 08:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to globale variable oder nicht? on Wed, 12 Sep 2012 09:00:23 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a> 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.</p>
</blockquote>
<p>Ich verwende weiterhin Singletons (wenn ich auch nicht sagen kann wie es in den vorherigen Firmen abläuft, hatte dort einiges zumindest auf die Variante mit der Funktion mit statischen Kontent geändert), aber versuche die Anzahl in Grenzen zu halten.</p>
<p>Im aktuellen Programm gibt es effektiv 4 globale Werte (unterschiedlich umgesetzt):<br />
1. Ein Objektcache für Stammdaten [der eigentlich die DB-Zugriffe reduzieren sollte - den ich aber liebend gern entfernen würde, er macht imho mehr Ärger als er wirklich Nutzen bringt].<br />
2. Daten zur aktuellen Anmeldung [Benutzername/Rechte]<br />
3. Die Programmkonfiguration<br />
4. Das VCL-Application Objekt</p>
<p>Nummer 2 ist definitiv als Singleton [Meyer-Singleton] umgesetzt (basiert auf meinen Mist), da ich hier keinen Grund für mehrere Instanzen sehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250532</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 12 Sep 2012 09:00:23 GMT</pubDate></item></channel></rss>