<?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[Frage bezüglich Scope (Frage zur Umsetzung in SFML)]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe gerade aus Interesse SFML studiert und bin dabei in der Datei SocketHelper.cpp auf folgendes Konstrukt gestoßen:</p>
<pre><code class="language-cpp">00084 struct SocketInitializer
00085 {
00086     SocketInitializer()
00087     {
00088         WSADATA InitData;
00089         WSAStartup(MAKEWORD(2,2), &amp;InitData);
00090     }
00091 
00092     ~SocketInitializer()
00093     {
00094         WSACleanup();
00095     }
00096 };
00097 
00098 SocketInitializer GlobalInitializer;
</code></pre>
<p>Quelle: <a href="http://www.sfml-dev.org/documentation/1.5/SocketHelper_8cpp-source.htm" rel="nofollow">http://www.sfml-dev.org/documentation/1.5/SocketHelper_8cpp-source.htm</a></p>
<p>Ich habe selber schon mit Sockets gearbeitet und mir ist der Sinn absolut klar.</p>
<p>Mir stellt sich dabei nur die Frage: Wie lange ist das dort angelegte Objekt gültig? Und vorallem: Ab wann?</p>
<p>Ist es nicht so, dass jede Source-Datei eine Art &quot;eigenen Gültigkeitsbereich&quot; hat und so weiter? Ist der hier beschriebene Code also sicher, dass das Objekt nicht mehrfach erstellt wird, etc.</p>
<p>Würde mich über Klärung freuen. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/258194/frage-bezüglich-scope-frage-zur-umsetzung-in-sfml</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 14:38:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/258194.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 07 Jan 2010 15:58:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage bezüglich Scope (Frage zur Umsetzung in SFML) on Thu, 07 Jan 2010 15:58:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe gerade aus Interesse SFML studiert und bin dabei in der Datei SocketHelper.cpp auf folgendes Konstrukt gestoßen:</p>
<pre><code class="language-cpp">00084 struct SocketInitializer
00085 {
00086     SocketInitializer()
00087     {
00088         WSADATA InitData;
00089         WSAStartup(MAKEWORD(2,2), &amp;InitData);
00090     }
00091 
00092     ~SocketInitializer()
00093     {
00094         WSACleanup();
00095     }
00096 };
00097 
00098 SocketInitializer GlobalInitializer;
</code></pre>
<p>Quelle: <a href="http://www.sfml-dev.org/documentation/1.5/SocketHelper_8cpp-source.htm" rel="nofollow">http://www.sfml-dev.org/documentation/1.5/SocketHelper_8cpp-source.htm</a></p>
<p>Ich habe selber schon mit Sockets gearbeitet und mir ist der Sinn absolut klar.</p>
<p>Mir stellt sich dabei nur die Frage: Wie lange ist das dort angelegte Objekt gültig? Und vorallem: Ab wann?</p>
<p>Ist es nicht so, dass jede Source-Datei eine Art &quot;eigenen Gültigkeitsbereich&quot; hat und so weiter? Ist der hier beschriebene Code also sicher, dass das Objekt nicht mehrfach erstellt wird, etc.</p>
<p>Würde mich über Klärung freuen. Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1834476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834476</guid><dc:creator><![CDATA[jghjghj]]></dc:creator><pubDate>Thu, 07 Jan 2010 15:58:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage bezüglich Scope (Frage zur Umsetzung in SFML) on Thu, 07 Jan 2010 16:24:10 GMT]]></title><description><![CDATA[<p>Die Variable <code>GlobalInitializer</code> ist spätestens, wenn du in die main kommst initialisiert und wird zerstört, wenn du die main wieder verlässt. Ist also global gültig. Das Problem ist aber, wenn du bereits vorher (z.B in einem Konstruktor eines anderen globalen Variable) darauf zugreifst, denn die Reihenfolge ist nicht geregetl, in denen globale Variablen über verschiedene Übersetzungseinheiten initialisiert werden. Die Zerstört ist in der umgekehrten Reihenfolge, wie sie initialisiert wurden, aber das hilft dir nicht viel, denn du weisst ja nicht, in welcher Reihenfolge die Initialisierung statt gefunden hat. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Mehfrach erstellt wird es nicht nein. Aber man könnte theoretisch selbst eine Variable vom Typ <code>SocketInitializer</code> erstellen und dann hast du das ganze 2x ja. Da sehe ich auch einen der Vorteile von Singletons gegenüber von globalen Variablen (ob Singletons gut oder böse sind sei dahingestellt), denn dort kannst du die Einmaligkeit steuern und ebenfalls, dass zum Zeitpunkt der Benuzung des Objektes eine Instanz da ist. (siehe Meyers Singleton).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1834501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1834501</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 07 Jan 2010 16:24:10 GMT</pubDate></item></channel></rss>