<?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[Speicherfreigabe std::map]]></title><description><![CDATA[<p>hallo,</p>
<p>warum und wie wird der Speicher einer Map automatisch wieder freigegeben?</p>
<pre><code>#include &lt;map&gt;

using namespace std;

int main () {

    map &lt;int, int&gt; mymap;

    for(int i = 0; i &lt; 1000000; i++)
    {
        mymap[i] = i+1235;
    }

    //mymap.clear();
return 1;

}
</code></pre>
<p>wenn ich das programm mit und ohne clear bauen und anschließend mit valgrind --tool=memcheck ausführe wird der Sepicher scheinbar immer freigegeben, warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324701/speicherfreigabe-std-map</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 08:40:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324701.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Mar 2014 09:01:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:01:45 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>warum und wie wird der Speicher einer Map automatisch wieder freigegeben?</p>
<pre><code>#include &lt;map&gt;

using namespace std;

int main () {

    map &lt;int, int&gt; mymap;

    for(int i = 0; i &lt; 1000000; i++)
    {
        mymap[i] = i+1235;
    }

    //mymap.clear();
return 1;

}
</code></pre>
<p>wenn ich das programm mit und ohne clear bauen und anschließend mit valgrind --tool=memcheck ausführe wird der Sepicher scheinbar immer freigegeben, warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391584</guid><dc:creator><![CDATA[nippler92]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:04:24 GMT]]></title><description><![CDATA[<p>Weil map so gebaut ist. Stichwort: RAII</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391586</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:09:08 GMT]]></title><description><![CDATA[<p>Also auf das &quot;warum&quot; kann ich antworten <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="😃"
    /></p>
<p>Man will den Programmierern Verantwortung abnehmen. Sie sollen sich nicht mehr selbst um Speicherbereinigungen kümmern müssen. Denn muss sich ein Programmierer selbst darum kümmern, sind das immer potentielle Fehlerquellen <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>
<p>Das ist übrigens bei allen modernen C++-Containerklassen so.</p>
<p>Vom &quot;wie&quot; hab ich keine Ahnung, hab selbst erst angefangen mit C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391587</guid><dc:creator><![CDATA[tröröö]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:09:08 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:12:17 GMT]]></title><description><![CDATA[<p>ok, 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/2391589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391589</guid><dc:creator><![CDATA[nippler92]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:14:42 GMT]]></title><description><![CDATA[<p>nippler92 schrieb:</p>
<blockquote>
<p>[...] wird der Sepicher scheinbar immer freigegeben, warum?</p>
</blockquote>
<p>Weil sich das so gehört für einen C++ Container. Quasi bei der schließenden Klammer der <code>main</code> -Funktion, wo die &quot;lokalen Variablen weggeräumt werden&quot;, wird automatisch der Destruktor von <code>mymap</code> aufgerufen. Und der wurde so definiert, dass der Speicher, den <code>mymap</code> <em>besitzt</em>, automatisch freigegeben wird. Aber nicht nur beim Zerstören passiert etwas Besonderes. Auch bei dem Versuch, das Objekt zu kopieren oder zuzuweisen wird vom Klassenautor definierter Code ausgeführt, der hier &quot;das Richtige&quot; macht. Du erhältst damit einen Typen, den Du so wie <code>int</code> und <code>double</code> bzgl Kopieren, Zuweisen und Zerstören verwenden kannst -- die Map speichert nur eben nicht einen einzigen Wert, sondern mehrere. Aber diese mehreren Werte zusammengenommen stellen quasi einen neuen Wert des Map-Typs dar. Deswegen nennt man das manchmal auch &quot;Werttyp&quot;. Werttypen machen einem das Leben als Programmierer leichter, weil man sich nicht mehr selbst um alles Kümmern muss. Dir kann es doch egal sein, wie die Map intern funktioniert. Hauptsache, du kannst ein Map-Objekt dazu benutzen, um einen &quot;Map-Wert&quot; zu speichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391591</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:28:47 GMT]]></title><description><![CDATA[<p>Ist in C++ der Zeitpunkt exakt vorgegeben, wann der Destruktor aufgerufen wird?</p>
<p>In PHP ist das nämlich so, dass man den genauen Zeitpunkt nicht kennt, wann der Garbage Collector einen Destruktor aufruft, nachdem ein Objekt seinen Gültigkeitsbereich verlassen hat. Das entscheidet PHP mehr oder weniger nach Gutdünken selbst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391593</guid><dc:creator><![CDATA[tröröö]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:28:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:28:15 GMT]]></title><description><![CDATA[<p>Ja, der Zeitpunkt ist genau definiert. Das Objekt wird zerstört, wenn es seinen Scope verlässt. Details gibt´s <a href="http://www.parashift.com/c++-faq-lite/dtors.html" rel="nofollow">hier</a> zu lesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391594</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe std::map on Fri, 28 Mar 2014 09:48:37 GMT]]></title><description><![CDATA[<p>tröröö schrieb:</p>
<blockquote>
<p>Ist in C++ der Zeitpunkt exakt vorgegeben, wann der Destruktor aufgerufen wird?</p>
</blockquote>
<p>Ja, das ist in C++ deterministisch. Denk es dir so, als würde der Compiler automatisch aus</p>
<pre><code class="language-cpp">int main() {
    string text = &quot;hello world&quot;;
    cout &lt;&lt; text &lt;&lt; endl;
}
</code></pre>
<p>ein</p>
<pre><code class="language-cpp">int main() {
    string text = &quot;hello world&quot;;
    cout &lt;&lt; text &lt;&lt; endl;
    test.~string(); // &lt;-- wird quasi vom Compiler automatisch eingefügt
                    //     NICHT &quot;PER HAND&quot; AUFRUFEN!
}
</code></pre>
<p>machen.</p>
<p>Und das klappt dann auch bei komplizierteren Funktionen, die mehrere <code>return</code> s haben und ggf durch Ausnahmen irgendwann vorzeitig beendet werden. Spätestens das will man dann nämlich nicht mehr per Hand schreiben. Diese Aufräumarbeiten kann man dank Destruktoren dem Compiler überlassen, der dann die Destruktoraufrufe automatisch einfügt.</p>
<p>Es gibt übrigens eine neue C++ FAQ bei <a href="http://isocpp.org" rel="nofollow">isocpp.org</a>:<br />
<a href="http://isocpp.org/wiki/faq/dtors" rel="nofollow">http://isocpp.org/wiki/faq/dtors</a></p>
<p>(Dieses FAQ ist eine Kombination aus mehreren, u.a. von Stroustrup und Cline).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391599</guid><dc:creator><![CDATA[kkaw]]></dc:creator><pubDate>Fri, 28 Mar 2014 09:48:37 GMT</pubDate></item></channel></rss>