<?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[wird bei map[] der Destructor aufgerufen?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine map&lt;int, Foo&gt; m;<br />
wenn ich da jetzt ein Foo abspeichere und danach an der selben Stelle ein anderes, wird dann das alte Objekt zerstoert (also mit Destructoraufruf)?</p>
<pre><code class="language-cpp">Foo foo1;
Foo foo2;
m[2] = foo1;
m[2] = foo2;  // Wird an dieser Stelle foo1 zerstoert?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/288043/wird-bei-map-der-destructor-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 04:02:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288043.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jun 2011 12:08:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:08:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine map&lt;int, Foo&gt; m;<br />
wenn ich da jetzt ein Foo abspeichere und danach an der selben Stelle ein anderes, wird dann das alte Objekt zerstoert (also mit Destructoraufruf)?</p>
<pre><code class="language-cpp">Foo foo1;
Foo foo2;
m[2] = foo1;
m[2] = foo2;  // Wird an dieser Stelle foo1 zerstoert?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2075675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075675</guid><dc:creator><![CDATA[Saftladen]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:08:12 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:18:50 GMT]]></title><description><![CDATA[<p>Nein, das wär ja fatal, da foo1 noch im Scope ist. Das in der Map gespeicherte Objekt wird auch nicht zerstört und neukonstruiert, es wird der Zuweisungsoperator des in der Map gespeicherten Objekts mit foo2 als Parameter aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075678</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:18:50 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:17:45 GMT]]></title><description><![CDATA[<p>Hm, das ist aber schlecht.</p>
<p>Mein Foo hat naemlich als Member mehrere Smartpointer:</p>
<pre><code class="language-cpp">class Foo {
   ref_ptr&lt;Group&gt;   group;
   ref_ptr&lt;Object&gt;  object;
   ...
}
</code></pre>
<p>wenn jetzt in map[2] schon ein Foo steht, dann soll das alte weggeworfen und zerstoert werden. Wobei... Foo::operator= ruft dann ja fuer alle Member operator= auf, was bei Smart pointer ja dann doch passen wuerde, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075685</guid><dc:creator><![CDATA[Saftladen]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:19:35 GMT]]></title><description><![CDATA[<p>Das sollte besser passen, ja, sonst wäre der Zuweisungsoperator falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075686</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:20:10 GMT]]></title><description><![CDATA[<p>Saftladen schrieb:</p>
<blockquote>
<pre><code class="language-cpp">m[2] = foo2;  // Wird an dieser Stelle foo1 zerstoert?
</code></pre>
</blockquote>
<p>Nein. Das was in der Map ist, hat sowieso nichts mehr mit foo1 zu tun, da es nur eine Kopie davon ist. Wenn du foo1 in der Zwischenzeit zerstört oder verändert hättest, hätte m[2] nichts davon mitbekommen. Andersrum bekommt foo1 nichts von dem mit, was du mit m[2] anstellst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075687</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075687</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:22:21 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Saftladen schrieb:</p>
<blockquote>
<pre><code class="language-cpp">m[2] = foo2;  // Wird an dieser Stelle foo1 zerstoert?
</code></pre>
</blockquote>
<p>Nein. Das was in der Map ist, hat sowieso nichts mehr mit foo1 zu tun, da es nur eine Kopie davon ist. Wenn du foo1 in der Zwischenzeit zerstört oder verändert hättest, hätte m[2] nichts davon mitbekommen. Andersrum bekommt foo1 nichts von dem mit, was du mit m[2] anstellst.</p>
</blockquote>
<p>Ja, ich hab mich missverstaendlich ausgedrueckt. Ich meinte, ob das Foo IN der Map zerstoert wird. Also Destructor aufruf. Aber das ist ja offenbar nicht der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075689</guid><dc:creator><![CDATA[Saftladen]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 12:49:21 GMT]]></title><description><![CDATA[<p>Saftladen schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Saftladen schrieb:</p>
<blockquote>
<pre><code class="language-cpp">m[2] = foo2;  // Wird an dieser Stelle foo1 zerstoert?
</code></pre>
</blockquote>
<p>Nein. Das was in der Map ist, hat sowieso nichts mehr mit foo1 zu tun, da es nur eine Kopie davon ist. Wenn du foo1 in der Zwischenzeit zerstört oder verändert hättest, hätte m[2] nichts davon mitbekommen. Andersrum bekommt foo1 nichts von dem mit, was du mit m[2] anstellst.</p>
</blockquote>
<p>Ja, ich hab mich missverstaendlich ausgedrueckt. Ich meinte, ob das Foo IN der Map zerstoert wird. Also Destructor aufruf. Aber das ist ja offenbar nicht der Fall.</p>
</blockquote>
<p>Du kannst das alte Foo mit erase löschen und dann das neue hinzufügen. Allerdings sollte dein Zuweisungsoperator so implementiert sein, dass das keinen Unterschied, nur schlechtere Performance, ergibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075701</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Thu, 09 Jun 2011 12:49:21 GMT</pubDate></item><item><title><![CDATA[Reply to wird bei map[] der Destructor aufgerufen? on Thu, 09 Jun 2011 13:02:59 GMT]]></title><description><![CDATA[<p>Saftladen schrieb:</p>
<blockquote>
<p>Ja, ich hab mich missverstaendlich ausgedrueckt. Ich meinte, ob das Foo IN der Map zerstoert wird. Also Destructor aufruf. Aber das ist ja offenbar nicht der Fall.</p>
</blockquote>
<p>Ein map-Zugriff liefert dir eine Referenz auf das Objekt (oder falls das Element noch nicht existiert eine Referenz auf ein neu angelegtes Element). Was du mit diesem Element machst, ist deine Sache. Hier rufst du durch das '=' einen Zuweisungsoperator auf. Die map selber macht garantiert nichts eigenes beim Zugriff.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2075710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2075710</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 09 Jun 2011 13:02:59 GMT</pubDate></item></channel></rss>