<?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[static std::map]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte gerne eine std::map in vielen verschiedenen Funktionen nutzen. Deshalb habe ich eine Datei &quot;global.h&quot; angelegt und dort z.B. folgendes reingeschrieben:</p>
<pre><code class="language-cpp">static std::map&lt;std::string, int&gt; myMap;
</code></pre>
<p>In der main()-Funktion habe ich dann die map befüllt, und mit erschrecken festgestellt, dass sie in anderen Funktionen (außerhalb von Main.cpp) leer ist.</p>
<p>Jetzt ist die Frage: Was mache ich jetzt und wie ist das Verhalten des Programms zu erklären?</p>
<p>Genauer: Ich habe einige Threads in denen auf diese std::map zugegriffen werden soll. Mutexe, etc. werden benutzt.</p>
<p>Sollte ich vielleicht ein struct schreiben in den ich alle Variablen die ich in den Threads brauche speicher, und diese dann per Parameter an die Threads übergeben?</p>
<p>Bin leider ratlos...</p>
<p>Danke,<br />
Mappy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227013/static-std-map</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 07:05:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227013.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Nov 2008 16:28:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 16:28:12 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich möchte gerne eine std::map in vielen verschiedenen Funktionen nutzen. Deshalb habe ich eine Datei &quot;global.h&quot; angelegt und dort z.B. folgendes reingeschrieben:</p>
<pre><code class="language-cpp">static std::map&lt;std::string, int&gt; myMap;
</code></pre>
<p>In der main()-Funktion habe ich dann die map befüllt, und mit erschrecken festgestellt, dass sie in anderen Funktionen (außerhalb von Main.cpp) leer ist.</p>
<p>Jetzt ist die Frage: Was mache ich jetzt und wie ist das Verhalten des Programms zu erklären?</p>
<p>Genauer: Ich habe einige Threads in denen auf diese std::map zugegriffen werden soll. Mutexe, etc. werden benutzt.</p>
<p>Sollte ich vielleicht ein struct schreiben in den ich alle Variablen die ich in den Threads brauche speicher, und diese dann per Parameter an die Threads übergeben?</p>
<p>Bin leider ratlos...</p>
<p>Danke,<br />
Mappy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612434</guid><dc:creator><![CDATA[Mappy]]></dc:creator><pubDate>Sun, 09 Nov 2008 16:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 16:54:24 GMT]]></title><description><![CDATA[<p>mehr code</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612450</guid><dc:creator><![CDATA[givethedogabone]]></dc:creator><pubDate>Sun, 09 Nov 2008 16:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 16:55:30 GMT]]></title><description><![CDATA[<p>Bitte etwas mehr Code zeigen. Dein myMap ist nur eine Deklaration. Gestern gabs ein ähnliches Thema mit static-Objekten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612452</guid><dc:creator><![CDATA[Bulli]]></dc:creator><pubDate>Sun, 09 Nov 2008 16:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 17:00:30 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// Global.h

#ifndef GLOBAL_H
#define GLOBAL_H

#include &lt;map&gt;

typedef std::map&lt;const char *, int&gt; Addresses;
static Addresses addresses;

#endif /* GLOBAL_H */
</code></pre>
<pre><code class="language-cpp">// Main.cpp
#include &quot;Global.h&quot;

int main(int argc, char *argv[])
{
 addresses.insert(std::make_pair(&quot;localhost&quot;, 0));
 std::cout &lt;&lt; addresses.size() &lt;&lt; std::endl;
 runThreads();
}
</code></pre>
<p>Ich gebe anschließend nochmal ( z.B. in runThread() ) addresses.size() aus, aberes erscheint plötzlich 0... Die Liste ist aufeinmal leer. Warum? Wie kann ich das beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612455</guid><dc:creator><![CDATA[Mappy]]></dc:creator><pubDate>Sun, 09 Nov 2008 17:00:30 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 17:03:02 GMT]]></title><description><![CDATA[<p>Static bedeutet bei globalen Variablen, daß die Variablen nur innerhalb einer Übersetzungseinheit sichtbar sind. Wenn du das so in den Header schreibst, bekommt demnach jede Übersetzungseinheit eine &quot;eigene&quot; myMap.</p>
<p>Die Lösung wäre, die Map z.B. in Main.cpp zu definieren (aber nicht static!), und in die global.h kommt dann eine Deklaration als extern.</p>
<pre><code class="language-cpp">// Main.cpp
std::map&lt;std::string, int&gt; myMap;
---
// global.h
extern std::map&lt;std::string, int&gt; myMap;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1612457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612457</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sun, 09 Nov 2008 17:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 18:01:19 GMT]]></title><description><![CDATA[<p>Das klappt perfekt. Vieeeeeeeeeeeeeeeeeelen Dank <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/1612485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612485</guid><dc:creator><![CDATA[Mappy]]></dc:creator><pubDate>Sun, 09 Nov 2008 18:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 20:54:00 GMT]]></title><description><![CDATA[<p>Mappy schrieb:</p>
<blockquote>
<p>Genauer: Ich habe einige Threads in denen auf diese std::map zugegriffen werden</p>
</blockquote>
<p>dann solltest du sie unbedingt als volatile qualifizieren ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612544</guid><dc:creator><![CDATA[Paul Manns]]></dc:creator><pubDate>Sun, 09 Nov 2008 20:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 21:13:19 GMT]]></title><description><![CDATA[<p>globale variablen sind sone Sache. Man könnte auch sagen: pfui!<br />
Gerade wenn du mit mehreren Threads drauf zugreifen willst wäre es evtl. sinnvoll, die geschichte in eine Singleton-Klasse zu wrappen, die dann auch gleich die parallelen Zugriffe mit regelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612552</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 09 Nov 2008 21:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 23:05:07 GMT]]></title><description><![CDATA[<p>Paul Manns schrieb:</p>
<blockquote>
<p>Mappy schrieb:</p>
<blockquote>
<p>Genauer: Ich habe einige Threads in denen auf diese std::map zugegriffen werden</p>
</blockquote>
<p>dann solltest du sie unbedingt als volatile qualifizieren ...</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1580903.html#1580903" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1580903.html#1580903</a></p>
<p>Woher kommt eigentlich dieser Irrglaube?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612589</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 09 Nov 2008 23:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Sun, 09 Nov 2008 23:47:57 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Paul Manns schrieb:</p>
<blockquote>
<p>Mappy schrieb:</p>
<blockquote>
<p>Genauer: Ich habe einige Threads in denen auf diese std::map zugegriffen werden</p>
</blockquote>
<p>dann solltest du sie unbedingt als volatile qualifizieren ...</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1580903.html#1580903" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1580903.html#1580903</a></p>
<p>Woher kommt eigentlich dieser Irrglaube?</p>
</blockquote>
<p>Ganz klar: Aus der Vorstellung jedes standard Schlüsselwort in C++ müsste einen Sinn haben. volatile hat in reinem standard C++ aber legentlich die Funktion eines überflüssigen Typ-Modifiers.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612590</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Sun, 09 Nov 2008 23:47:57 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Mon, 10 Nov 2008 18:30:51 GMT]]></title><description><![CDATA[<p>Sorry, double post.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612591</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Mon, 10 Nov 2008 18:30:51 GMT</pubDate></item><item><title><![CDATA[Reply to static std::map on Mon, 10 Nov 2008 07:48:52 GMT]]></title><description><![CDATA[<p>Ich würde auf jeden Fall pumuckls Tipp berücksichtigen. Globale Variablen sind nicht nur problematisch, wenn man sie in mehreren Threads verwenden will, sondern auch, wenn andere globale Variablen sie benutzen sollen.<br />
Ich würde da das COFU-Idiom benutzen (meinetwegen auch Meyers-Singleton):</p>
<pre><code class="language-cpp">typedef std::map&lt;std::string, int&gt; AddressesType;

AddressesType&amp; getInstance()
{
    static AddressesType addresses;
    return addresses;
}
</code></pre>
<p>So wird sichergestellt, das die AddressesType-Instanz auch existiert, wenn Du sie benötigst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612626</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 10 Nov 2008 07:48:52 GMT</pubDate></item></channel></rss>