<?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[new&#x2F;delete und STL-Container]]></title><description><![CDATA[<p>Hi,</p>
<p>angenommen ich habe</p>
<pre><code class="language-cpp">vector&lt;myObject&gt; myVector;
</code></pre>
<p>wenn ich jetzt folgendes mache</p>
<pre><code class="language-cpp">myVector.push_back(new myObject);
</code></pre>
<p>kann ich dann</p>
<pre><code class="language-cpp">delete myVector[0]; //bzw. myVector[1, 2, ..., x]
</code></pre>
<p>machen oder entsteht dabei irgendwie ein Speicherleck?</p>
<p>ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/154402/new-delete-und-stl-container</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 00:32:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/154402.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Jul 2006 20:15:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Wed, 26 Jul 2006 20:15:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>angenommen ich habe</p>
<pre><code class="language-cpp">vector&lt;myObject&gt; myVector;
</code></pre>
<p>wenn ich jetzt folgendes mache</p>
<pre><code class="language-cpp">myVector.push_back(new myObject);
</code></pre>
<p>kann ich dann</p>
<pre><code class="language-cpp">delete myVector[0]; //bzw. myVector[1, 2, ..., x]
</code></pre>
<p>machen oder entsteht dabei irgendwie ein Speicherleck?</p>
<p>ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104926</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Wed, 26 Jul 2006 20:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Wed, 26 Jul 2006 20:19:01 GMT]]></title><description><![CDATA[<p>Wenn du ein vector&lt;myObject*&gt; hättest, dann ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104928</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Wed, 26 Jul 2006 20:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Wed, 26 Jul 2006 20:40:52 GMT]]></title><description><![CDATA[<p>Mit new lieferst Du einen Pointer zurück, daher wie vorgeschlagen:</p>
<pre><code class="language-cpp">#include &quot;xINT.h&quot;
#include &lt;vector&gt;
using namespace std;

int main()
{ 
  {
    vector&lt;xINT*&gt; myVector;
    myVector.push_back( new xINT );
    delete myVector[0]; 
  }
}
</code></pre>
<p>Ausgabe:<br />
00316410: ctor<br />
00316410: dtor</p>
<p>Testklasse xINT zum Experimentieren siehe: <a href="http://www.henkessoft.de/C++/C++%20Fortgeschrittene/C++_Fortgeschrittene.htm#2.2._Unsere_Testklasse_loggt_mit" rel="nofollow">http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.2._Unsere_Testklasse_loggt_mit</a></p>
<p>Es funktioniert also.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1104946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1104946</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Wed, 26 Jul 2006 20:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Thu, 27 Jul 2006 06:44:54 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Achtung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
Du löscht dabei nur das Objekt, der Zeiger bleibt im Vector, und zeigt ins Nirvana.<br />
Beim nächsten Zugriff kann es krachen.<br />
Der Zeiger muss noch aus dem Vector entfernt werden mit remove()..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105044</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Thu, 27 Jul 2006 06:44:54 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Thu, 27 Jul 2006 06:56:27 GMT]]></title><description><![CDATA[<p>... was aber beim Vektor vorne extrem ineffektiv ist. Wenn du an beiden Enden schnell einfügen und entfernen willst nimm deque und mach es so:</p>
<pre><code class="language-cpp">std::deque&lt;bla*&gt; myDeque;
myDeque.push_back (new bla);
delete myDeque.front ();
myDeque.pop_front ();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1105050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105050</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 27 Jul 2006 06:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Thu, 27 Jul 2006 16:26:32 GMT]]></title><description><![CDATA[<p>Vielen Dank euch allen. Das ich den Container mit Pointern machen muss ist mir auch 20 minuten später eingefallen, aber da war ich schon im Bett^^.</p>
<p>Ich muss aber zuerst den delete-operator benützen und anschließend das Element aus aus dem Container entfernen, stimmt's? Denn das Element ist ja dann nicht mehr drinnen und ich hätte ein Speicherleck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105541</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Thu, 27 Jul 2006 16:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Thu, 27 Jul 2006 16:40:19 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::vector&lt;MyClass*&gt; myVector;
//...
MyClass* temp = myVector[0];
myVector.remove(temp); //Syntax? bin mir grad nicht sicher
delete temp;
</code></pre>
<p>So geht es auch. Der Speicher auf dem Heap ist völlig unabhängig von deinem Vektor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105551</guid><dc:creator><![CDATA[blub2k6]]></dc:creator><pubDate>Thu, 27 Jul 2006 16:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Thu, 27 Jul 2006 17:31:27 GMT]]></title><description><![CDATA[<p>blub2k6 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::vector&lt;MyClass*&gt; myVector;
//...
MyClass* temp = myVector[0];
myVector.remove(temp); //Syntax? bin mir grad nicht sicher
delete temp;
</code></pre>
<p>So geht es auch. Der Speicher auf dem Heap ist völlig unabhängig von deinem Vektor.</p>
</blockquote>
<p>Das wäre also eine Möglichkeit zuerst das Element zu entfernen und danach erst das Objekt zu löschen, richtig?<br />
Das widerspricht aber meinem ürsprünglichen Plan eben genau diese temporären Pointer zu vermeiden.</p>
<p>Beispiel: Anstatt</p>
<pre><code class="language-cpp">vector&lt;myClass*&gt; myVector;
myClass *temp = new myClass,
myVector.push_back(temp);
//... temp auf andere Objekte zeigen lassen ...
temp = myVector[0];
myVector.remove(temp);
delete temp;
</code></pre>
<p>zu schreiben, wollte ich das ganze verkürzen und nur</p>
<pre><code class="language-cpp">vector&lt;myClass*&gt; myVector;
myVector.push_back(new myClass);
//...
delete myVector[0];
myVector.remove(myVector[0]);
</code></pre>
<p>schreiben.</p>
<p>Ich war mir aber dabei nicht sicher ob das geht und ob da nicht doch irgendwelche Speicherlecks entstehen. Aber jetzt ist glaube ich alles klar. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1105579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1105579</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Thu, 27 Jul 2006 17:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Fri, 28 Jul 2006 22:01:25 GMT]]></title><description><![CDATA[<p>Schau Dir mal Auto-/Smart-Pointer an, z.B. hier: <a href="http://www.henkessoft.de/C++/C++%20Fortgeschrittene/C++_Fortgeschrittene.htm#2.9._auto_ptr" rel="nofollow">http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.9._auto_ptr</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106415</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Fri, 28 Jul 2006 22:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Sat, 29 Jul 2006 10:29:58 GMT]]></title><description><![CDATA[<p>Könntest du mir einmal bitte ein Beispiel schreiben wie auto_ptr mein Anliegen vereinfachen würden? Als Containerelement sind sie ja ungeeignet wie ich bei dir gelesen habe. Also kommen sie nur als Ersatz für die temporären Pointer infrage.</p>
<p>Meinst du etwa so in der Art?</p>
<pre><code class="language-cpp">std::vector&lt;myClass*&gt; myVector;
myVector.push_back(new myClass);
//...
auto_ptr&lt;myClass&gt; pointer(myVector[0]);
myVector.remove(pointer);
</code></pre>
<p>pointer würde dann automatisch den oben mit new angeforderten Speicher wieder freigeben, stimmt's?</p>
<p>PS: In den Tutorials über new/delete steht immer, dass &quot;gute&quot; Betriebssysteme den Speicher nach Beendigung des Programmes von selbst wieder freigeben. Gehören die gängigen Betriebssysteme Windows, Mac, Linux, Unix, etc. denn zu den &quot;guten&quot; Betriebssystemen? Bei Windows weiß man ja nie...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106549</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Sat, 29 Jul 2006 10:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Sat, 29 Jul 2006 12:06:24 GMT]]></title><description><![CDATA[<p>Frager schrieb:</p>
<blockquote>
<p>Könntest du mir einmal bitte ein Beispiel schreiben wie auto_ptr mein Anliegen vereinfachen würden? Als Containerelement sind sie ja ungeeignet wie ich bei dir gelesen habe. Also kommen sie nur als Ersatz für die temporären Pointer infrage.</p>
</blockquote>
<p>Ja das stimmt, als Containerelement sind sie ungeeignet. Du könntest dir boost::ptr_vector angucken, das vereinfacht es wirklich.</p>
<blockquote>
<p>PS: In den Tutorials über new/delete steht immer, dass &quot;gute&quot; Betriebssysteme den Speicher nach Beendigung des Programmes von selbst wieder freigeben. Gehören die gängigen Betriebssysteme Windows, Mac, Linux, Unix, etc. denn zu den &quot;guten&quot; Betriebssystemen? Bei Windows weiß man ja nie...</p>
</blockquote>
<p>Gewöhn dir am besten gar nicht erst an, dich darauf zu verlassen. Was nämlich wenn dein Programm nicht beendet wird?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106591</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 29 Jul 2006 12:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und STL-Container on Sat, 29 Jul 2006 12:32:14 GMT]]></title><description><![CDATA[<p>Aber nach einem Neustart ist der Speicher doch auf jeden Fall wieder freigegeben, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1106617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1106617</guid><dc:creator><![CDATA[Frager]]></dc:creator><pubDate>Sat, 29 Jul 2006 12:32:14 GMT</pubDate></item></channel></rss>