<?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[erase bei map und vector - Elemente gelöscht oder nicht?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe ein Problem mit genannter Methode.</p>
<p>Laut Beschreibung löscht die Methode das Element und entfernt es aus dem Container. Das muss ja dann auch für clear() gelten.</p>
<p>Nun hab ich folgende Konstruktionen:</p>
<pre><code class="language-cpp">vector&lt;MyObject *&gt; vec;
map&lt;int, MyObject1 *&gt; m;

... // Einfügen von Zeigern dynamisch mit new angelegter Objekte
... // im Destruktor dieser Klasse dann

vec.clear();
m.clear();
</code></pre>
<p>Nun werden die clear()-Methoden zwar ausgeführt, aber die Destruktoren der Elementobjekte, deren Zeiger eingetragen sind werden nicht gerufen!<br />
Ich dachte clear() bzw. erase löschen die Elemente vor dem Entfernen?</p>
<p>Muss ich dann die Container durchlaufen, für jedes Element delete rufen und danach erst clear()? Dann würden aber die Zeiger im Container auf ungültige Adressen verweisen, oder nicht?</p>
<p>Danke schon mal<br />
Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141561/erase-bei-map-und-vector-elemente-gelöscht-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 13:37:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141561.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Mar 2006 08:00:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to erase bei map und vector - Elemente gelöscht oder nicht? on Thu, 23 Mar 2006 08:00:39 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>habe ein Problem mit genannter Methode.</p>
<p>Laut Beschreibung löscht die Methode das Element und entfernt es aus dem Container. Das muss ja dann auch für clear() gelten.</p>
<p>Nun hab ich folgende Konstruktionen:</p>
<pre><code class="language-cpp">vector&lt;MyObject *&gt; vec;
map&lt;int, MyObject1 *&gt; m;

... // Einfügen von Zeigern dynamisch mit new angelegter Objekte
... // im Destruktor dieser Klasse dann

vec.clear();
m.clear();
</code></pre>
<p>Nun werden die clear()-Methoden zwar ausgeführt, aber die Destruktoren der Elementobjekte, deren Zeiger eingetragen sind werden nicht gerufen!<br />
Ich dachte clear() bzw. erase löschen die Elemente vor dem Entfernen?</p>
<p>Muss ich dann die Container durchlaufen, für jedes Element delete rufen und danach erst clear()? Dann würden aber die Zeiger im Container auf ungültige Adressen verweisen, oder nicht?</p>
<p>Danke schon mal<br />
Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022145</guid><dc:creator><![CDATA[Reth]]></dc:creator><pubDate>Thu, 23 Mar 2006 08:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to erase bei map und vector - Elemente gelöscht oder nicht? on Thu, 23 Mar 2006 08:07:17 GMT]]></title><description><![CDATA[<p>Reth schrieb:</p>
<blockquote>
<p>Muss ich dann die Container durchlaufen, für jedes Element delete rufen und danach erst clear()?</p>
</blockquote>
<p>ja</p>
<p>Reth schrieb:</p>
<blockquote>
<p>Ich dachte clear() bzw. erase löschen die Elemente vor dem Entfernen?</p>
</blockquote>
<p>nur objekte keine objektzeiger</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022147</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Thu, 23 Mar 2006 08:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to erase bei map und vector - Elemente gelöscht oder nicht? on Thu, 23 Mar 2006 08:09:56 GMT]]></title><description><![CDATA[<p>Die Container rufen nur die Destruktoren der eingebundenen Objekte auf - und ein blanker Pointer kümmert sich <strong>nicht</strong> selber um das delete. Also bleibt dir nur übrig, entweder von Hand alle Elemente zu delete'n, bevor du erase()/clear() aufrufst, oder einen Smart-Pointer zu verwenden, der sich darum kümmert (z.B. boost::shared_ptr).</p>
<p>(PS: auto_ptr ist nicht geeignet)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022150</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 23 Mar 2006 08:09:56 GMT</pubDate></item></channel></rss>