<?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[Eine Frage zur Speicherverwaltung]]></title><description><![CDATA[<p>Ich weiß nicht ob diese Frage schon mal gestellt wurde (bestimmt), aber ich habe keine passende Antwort im Forum gefunden.<br />
Ich komme von Python her und dort läuft die Speicherverwaltung automatisch ab. Ich weiß das ich in C++ jedes Objekt, das ich mit new() angelegt habe, auch wieder freigeben muss.<br />
Was aber passiert mit dem Speicher, wenn ich es nicht tue? Während des Programmablaufs ist der Speicher verloren und nicht mehr zugreifbar und kann wahrscheinlich auch nicht mehr neu angefordert werden.<br />
Aber was ist wenn das Programm beendet wird, ist dann der Speicher wieder frei oder immer noch nicht? Kann ich ein Programm so schlecht programmieren, das es sagen wir mal 500MB RAM belegt (während des Ablaufs) und diesen Speicher auch nicht mehr freigibt, wenn das Programm beendet wird?<br />
Nicht das ich das vor habe, aber irgendwie glaube ich mein Programm macht das... <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/189236/eine-frage-zur-speicherverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 09:32:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189236.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Aug 2007 08:07:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 08:07:32 GMT]]></title><description><![CDATA[<p>Ich weiß nicht ob diese Frage schon mal gestellt wurde (bestimmt), aber ich habe keine passende Antwort im Forum gefunden.<br />
Ich komme von Python her und dort läuft die Speicherverwaltung automatisch ab. Ich weiß das ich in C++ jedes Objekt, das ich mit new() angelegt habe, auch wieder freigeben muss.<br />
Was aber passiert mit dem Speicher, wenn ich es nicht tue? Während des Programmablaufs ist der Speicher verloren und nicht mehr zugreifbar und kann wahrscheinlich auch nicht mehr neu angefordert werden.<br />
Aber was ist wenn das Programm beendet wird, ist dann der Speicher wieder frei oder immer noch nicht? Kann ich ein Programm so schlecht programmieren, das es sagen wir mal 500MB RAM belegt (während des Ablaufs) und diesen Speicher auch nicht mehr freigibt, wenn das Programm beendet wird?<br />
Nicht das ich das vor habe, aber irgendwie glaube ich mein Programm macht das... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1342005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342005</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Fri, 10 Aug 2007 08:07:32 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 08:23:12 GMT]]></title><description><![CDATA[<p>Hallo,<br />
unter modernen Betriebssystemen wird der Speicher, den ein Prozess anfordert, nach Beendigung des Prozesses wieder als frei eingestuft. Der Speicher geht also nicht verloren. In früheren Tagen musste man schon mal neu booten, um die Auswirkungen großer Speicherlöcher wieder loszuwerden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342014</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 10 Aug 2007 08:23:12 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 08:53:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>nur der Vollständigkeit halber: Es gibt auch in C++ automatische Speicherverwaltung !<br />
Man muss Objekte nicht mit new anlegen ... und dann auch nicht explizit freigeben.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">int main() {
   string s = &quot;ein normaler String&quot;;
   cout &lt;&lt; s;
   return 0;
}
</code></pre>
<p>Kein new, kein delete und absolut speicherleckfrei.:D</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342028</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 10 Aug 2007 08:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 08:58:54 GMT]]></title><description><![CDATA[<p>Jaja schon klar <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="🙂"
    /> Aber ich analysiere JPG Dateien und muss da viel dynamisch erzeugen... leider... irgendwie bin ich da sehr großzügig mit dem Speicher, wenn das Programm läuft sind schnell 400MB voll... schon krass, weiß auch nicht genau wo es her kommt denn ich habe nun jedem <strong>new</strong> ein entsprechendes <strong>delete</strong> spendiert und immer noch keine Besserung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342035</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Fri, 10 Aug 2007 08:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 09:05:37 GMT]]></title><description><![CDATA[<p>TheGrudge schrieb:</p>
<blockquote>
<p>Jaja schon klar :)...</p>
</blockquote>
<p>Dann ist ja gut. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1342039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342039</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 10 Aug 2007 09:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 09:09:56 GMT]]></title><description><![CDATA[<p>jedem array new musst du ein delete [] spendieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342042</guid><dc:creator><![CDATA[FordPerfect]]></dc:creator><pubDate>Fri, 10 Aug 2007 09:09:56 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Fri, 10 Aug 2007 15:48:58 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Hi,</p>
<p>nur der Vollständigkeit halber: Es gibt auch in C++ automatische Speicherverwaltung !<br />
Man muss Objekte nicht mit new anlegen ... und dann auch nicht explizit freigeben.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">int main() {
   string s = &quot;ein normaler String&quot;;
   cout &lt;&lt; s;
   return 0;
}
</code></pre>
<p>Kein new, kein delete und absolut speicherleckfrei.:D</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Jupp. Lustigerweise gibt es sogar ein Keyword dafür, also das was &quot;default&quot; ist wenn man nicht &quot;static&quot; schreibt. Und zwar &quot;auto&quot; - eben wie in &quot;automatic&quot; <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>
<pre><code class="language-cpp">int main() {
   auto string s = &quot;ein normaler String&quot;;
   cout &lt;&lt; s;
   return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1342303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342303</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Aug 2007 15:48:58 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 07:51:43 GMT]]></title><description><![CDATA[<p>Nur eine Randbemerkung, die nicht direkt mit dem Speicher zu tun hat: In C++ verwaltest du mehr als nur Speicher (z.B. Dateihandles oder Datenbank-Lock's). Und nicht alle diese Ressourcen werden automatisch aufgeräumt, wenn sich dein Programm beendet. Sowas freizugeben ist die Aufgabe deiner Destruktoren - und die werden <strong>nicht</strong> aufgerufen, wenn das System seinen Speicher zurückfordert. (und wenn du Glück hast, werden die nichtmal bei einem Neustart des Systems freigegeben :D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343487</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 13 Aug 2007 07:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 08:01:59 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(und wenn du Glück hast, werden die nichtmal bei einem Neustart des Systems freigegeben :D)</p>
</blockquote>
<p>Und wie gibt man diese dann frei, wenn dies der Fall sein sollte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343494</guid><dc:creator><![CDATA[nki]]></dc:creator><pubDate>Mon, 13 Aug 2007 08:01:59 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 08:10:54 GMT]]></title><description><![CDATA[<p>System neu installieren <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="😃"
    /> Aber besser ist es da, die Daten gar nicht erst zu verlieren.</p>
<p>(aber so hartnäckige Sperren sind meist auf Dateiebene angelegt (z.B. eine gesperrte DB-Tabelle) und können umgangen werden, indem du die betroffene Tabelle kopierst und dann das Original löschst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343508</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 13 Aug 2007 08:10:54 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 08:39:29 GMT]]></title><description><![CDATA[<p>TheGrudge schrieb:</p>
<blockquote>
<p>Jaja schon klar <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="🙂"
    /> Aber ich analysiere JPG Dateien und muss da viel dynamisch erzeugen... leider... irgendwie bin ich da sehr großzügig mit dem Speicher, wenn das Programm läuft sind schnell 400MB voll... schon krass, weiß auch nicht genau wo es her kommt denn ich habe nun jedem <strong>new</strong> ein entsprechendes <strong>delete</strong> spendiert und immer noch keine Besserung.</p>
</blockquote>
<p>Hem, also new brauchst du eigentlich nur, wenn du polymorphische benutzen willst. Simon2 hat schon ein Bsp. gebracht, wo man ohne Polymorphie auskommt. Was machst du denn bei new? Bei JPG fällt mir so ein, das du wahrscheinlich einen oder mehrere Speicherbereiche reservierst? Aber selbst das kann man meistens ohne new erreichen, in dem man z.B. std::vector nimmt. Der kann schon viel Arbeit abnehmen und somit Fehler vermeiden.</p>
<p>Und wenn du trotzdem Polymorphy brauchst, dann solltest du dir vielleicht Smartpointer anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343534</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 13 Aug 2007 08:39:29 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 08:46:59 GMT]]></title><description><![CDATA[<p>Also bis jetzt ist das alles noch viel simpler:<br />
Ich durchsuche das Bild und speichere alle Pixel, die zu einem &quot;Objekt&quot; gehören, auf einem Stack, um sie danach getrennt nochmal zu analysieren.<br />
Also pushe ich per new() immer eine Koordinatenstruktur auf den Stack... oder ist das total doof von mir?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343542</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Mon, 13 Aug 2007 08:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 08:50:14 GMT]]></title><description><![CDATA[<p>TheGrudge schrieb:</p>
<blockquote>
<p>Also bis jetzt ist das alles noch viel simpler:<br />
Ich durchsuche das Bild und speichere alle Pixel, die zu einem &quot;Objekt&quot; gehören, auf einem Stack, um sie danach getrennt nochmal zu analysieren.<br />
Also pushe ich per new() immer eine Koordinatenstruktur auf den Stack... oder ist das total doof von mir?</p>
</blockquote>
<p>warum mit new?</p>
<pre><code class="language-cpp">std::stack&lt;point&gt; mypoints;
mypoints.push(point(47,11));
mypoints.push(point(08,15));
</code></pre>
<p>kein new, keine Memoryleaks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343547</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Mon, 13 Aug 2007 08:50:14 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 09:03:07 GMT]]></title><description><![CDATA[<p>Wie gesagt ich komme von Python und kenne C++ noch nicht so gut, ich dachte immer wenn ich keine Variable zuweise (also dynamisch erstelle) dann muss ich new benutzen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343559</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Mon, 13 Aug 2007 09:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 09:10:59 GMT]]></title><description><![CDATA[<p>Und das ist der Denkfehler - bei Sprachen wie Java oder Python ist new allgegewärtig, bei C++ wird es eher sparsam verwendet (und häufig gekapselt hinter Hilfsklassen (Smart-Pointer etc), die sich darum kümmern, den einmal angeforderten Speicher auch wieder freizugeben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343562</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 13 Aug 2007 09:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 09:18:48 GMT]]></title><description><![CDATA[<p>Also lebt die Koordinate namenlos auf dem Stack, normalerweise wäre sie ja sofort wieder gelöscht worden, aber da sie in einem Container lebt, der noch benutzt wird, wird sie auch nicht gelöscht und kann abgefragt werden?</p>
<p>Wo macht denn dann new konkret Sinn?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343568</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Mon, 13 Aug 2007 09:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 09:24:45 GMT]]></title><description><![CDATA[<p>Ja, die Koordinate lebt im Stack - und wird erst gelöscht, wenn du sie per pop() wieder rauswirfst (oder der Stack selber vernichtet wird).</p>
<p>new wird häufig in der internen Datenverwaltung von solchen Containerklassen verwendet - std::stack&lt;&gt; nutzt einen std::deque&lt;&gt;, um seine Elemente zu lagern, dieser wiederum holt sich per new den benötigten Speicher (und weiß auch selber, wann und wie er den Speicher freigeben muß). Und es kommt zum Einsatz, wenn du dich mit Polymorphie beschäftigst (ein Zeiger kann auf Objekte verschiedener Datentypen verweisen und entsprechend anders reagieren), aber bei letzterem mußt du die Zeiger auch sammeln und dich selbst um die Speicherfreigabe kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343569</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 13 Aug 2007 09:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 10:31:00 GMT]]></title><description><![CDATA[<p>TheGrudge schrieb:</p>
<blockquote>
<p>Wie gesagt ich komme von Python und kenne C++ noch nicht so gut, ich dachte immer <strong>wenn ich keine Variable zuweise</strong> (also dynamisch erstelle) dann muss ich new benutzen...</p>
</blockquote>
<p>Bei C++ ist eigentlich alles eine Variable. Bsp.:</p>
<pre><code class="language-cpp">vooid foo(std::string s)    // s ist eine Variable!
{
   // mit s kann ich machen was ich will
}
</code></pre>
<p>Genau das gleiche ist bei std::vector oder std::stack usw. der Fall.</p>
<p>Ein Container hilft dir, Speicher zu verwalten. Übergib ihm einfach deine Variable/Objekt und er regelt intern alles für dich. Die Container reservieren intern alles mit new, das mußt du aber nicht sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343610</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 13 Aug 2007 10:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 11:03:33 GMT]]></title><description><![CDATA[<p>TheGrudge schrieb:</p>
<blockquote>
<p>Also lebt die Koordinate namenlos auf dem Stack, ...</p>
</blockquote>
<p>Hmmm vielleicht nur noch mal der Klarheit zuliebe: Es gibt (mindestens) <em>ZWEI</em> Bedeutungen von &quot;auf dem Stack&quot;:</p>
<pre><code class="language-cpp">point p; // (1): Stackvariable
   std::stack&lt;point&gt; mypoints; // (2) Verwendung eines STL-Containers namens &quot;stack&quot;
</code></pre>
<p>(2) kann in seiner Implementierung durchaus Objekte mit &quot;new&quot; auf dem &quot;Heap&quot; ablegen.</p>
<p>Zweitens: std::stack legt <em>eine Kopie</em> ab:</p>
<pre><code class="language-cpp">point p(1, 2); 
   mypoints.push(p);
   p.x = 3;
   cout &lt;&lt; mypoints.top(); // -&gt; 1
</code></pre>
<p>Merke: Bei C++ kann sich hinter einer Variable direkt ein Objekt verbergen und nicht nur eine &quot;Referenz&quot;.</p>
<p>War vielleicht klar, aber &quot;doppelt genäht ...&quot; <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343628</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 13 Aug 2007 11:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 14:05:01 GMT]]></title><description><![CDATA[<p>Ich würde gerne meine Map umbauen und habe nun überlegt, einen Vector zu nehmen und damit die Koordinaten zu speichern.</p>
<p>Der Key der Map soll das Label sein (eine ID-Nummer), der Vector enthält nun die Koordinaten.</p>
<p>Jetzt scheine ich aber nur mit new arbeiten zu können, denn ich bekomme Compilerfehler wenn ich folgendes probiere:</p>
<pre><code class="language-cpp">typedef vector&lt;int&gt; iVector;
    typedef map&lt;int,iVector&gt; myMap;

    myMap m;

    if (m[1])
        m[1].push_back(11);
    else
        m[1] = iVector;
</code></pre>
<p>Vielleicht baue ich auch nur wieder Mist <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="🙂"
    /> Jedenfalls soll es so sein, das wenn kein Vector existiert, soll er angelegt werden, ansonsten ein push_back erfolgen.</p>
<p>Diese Version funktioniert hingegen:</p>
<pre><code class="language-cpp">typedef vector&lt;int&gt; iVector;
    typedef map&lt;int,iVector*&gt; myMap;

    myMap m;

    if (m[1])
        m[1]-&gt;push_back(11);
    else
        m[1] = new iVector;
</code></pre>
<p>Wieso muss ich hier nun new nutzen? Das kapiere ich noch nicht, kann der vector nicht &quot;anonym&quot; in der map leben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343728</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Mon, 13 Aug 2007 14:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 14:48:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">m[1] = iVector;
</code></pre>
<p>Dir ist schon klar, das du hier einen Typ und keine Variable/Objekt hinzufügst? <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>
<pre><code class="language-cpp">typedef vector&lt;int&gt; iVector; // Typdefinition! Nix Variable!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1343756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343756</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 13 Aug 2007 14:48:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 14:53:23 GMT]]></title><description><![CDATA[<p>Na ich dachte bei new bleibts ja auch weg und den Namen kann ich nachher eh nicht verwenden... och dieses Speicherzeugs macht mich noch fertig <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="😉"
    /> aber irgendwann wird man auch das kapiert haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343763</guid><dc:creator><![CDATA[TheGrudge]]></dc:creator><pubDate>Mon, 13 Aug 2007 14:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Mon, 13 Aug 2007 14:56:10 GMT]]></title><description><![CDATA[<p>Na dann lies mal <a href="http://www.kharchi.de/cppratgeber1.htm" rel="nofollow">das</a> und <a href="http://www.kharchi.de/cppratgeber2.htm" rel="nofollow">das</a> hier.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343769</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343769</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 13 Aug 2007 14:56:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Tue, 14 Aug 2007 06:17:10 GMT]]></title><description><![CDATA[<p>btw, ich wußte gar nicht, daß vector&lt;&gt; eine implizite Umwandlung nach bool anbietet <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="😉"
    /> (will heißen: wie hast du es geschafft, das <code>if(m[1])...</code> durch den Compiler zu bekommen? und was willst du dort überhaupt prüfen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344055</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 14 Aug 2007 06:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Tue, 14 Aug 2007 06:51:33 GMT]]></title><description><![CDATA[<p>TheGrudge schrieb:</p>
<blockquote>
<p>Ich würde gerne meine Map umbauen und habe nun überlegt, einen Vector zu nehmen und damit die Koordinaten zu speichern.</p>
<p>Der Key der Map soll das Label sein (eine ID-Nummer), der Vector enthält nun die Koordinaten.</p>
<p>Jetzt scheine ich aber nur mit new arbeiten zu können, denn ich bekomme Compilerfehler wenn ich folgendes probiere:</p>
<pre><code class="language-cpp">typedef vector&lt;int&gt; iVector;
    typedef map&lt;int,iVector&gt; myMap;

    myMap m;

    if (m[1])
        m[1].push_back(11);
    else
        m[1] = iVector;
</code></pre>
<p>Vielleicht baue ich auch nur wieder Mist <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="🙂"
    /> Jedenfalls soll es so sein, das wenn kein Vector existiert, soll er angelegt werden, ansonsten ein push_back erfolgen.</p>
<p>Diese Version funktioniert hingegen:</p>
<pre><code class="language-cpp">typedef vector&lt;int&gt; iVector;
    typedef map&lt;int,iVector*&gt; myMap;

    myMap m;

    if (m[1])
        m[1]-&gt;push_back(11);
    else
        m[1] = new iVector;
</code></pre>
<p>Wieso muss ich hier nun new nutzen? Das kapiere ich noch nicht, kann der vector nicht &quot;anonym&quot; in der map leben?</p>
</blockquote>
<p>So:</p>
<pre><code class="language-cpp">typedef vector&lt;int&gt; iVector;
    typedef map&lt;int,iVector&gt; myMap;

    myMap m;

    m[1].push_back(11);
</code></pre>
<p>m[l] legt automatisch ein Objekt an, wenn es nicht exisitiert. Willst Du wissen, ob ein Objekt in der map ist, dann geht das so:</p>
<pre><code class="language-cpp">if (m.find(l) == m.end())
       // kein vector zu l gefunden
</code></pre>
<p>ist doch ganz einfach. Immer noch kein new und keine Probleme mit der Speicherverwaltung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344064</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Tue, 14 Aug 2007 06:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to Eine Frage zur Speicherverwaltung on Tue, 14 Aug 2007 08:19:54 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>[...]<br />
m[l] legt automatisch ein Objekt an, wenn es nicht exisitiert. Willst Du wissen, ob ein Objekt in der map ist, dann geht das so:</p>
<pre><code class="language-cpp">if (m.find(l) == m.end())
       // kein vector zu l gefunden
</code></pre>
<p>ist doch ganz einfach. Immer noch kein new und keine Probleme mit der Speicherverwaltung.</p>
</blockquote>
<p>Ich hab das bis jetzt immer folgendermaßen gemacht:</p>
<pre><code class="language-cpp">if (m.count(l) == 0)
       // kein vector zu l gefunden
</code></pre>
<p>Ist find() schneller/besser/sauberer?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344115</guid><dc:creator><![CDATA[Beliah]]></dc:creator><pubDate>Tue, 14 Aug 2007 08:19:54 GMT</pubDate></item></channel></rss>