<?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[map + Defaultkonstuktor&#x2F;Destruktor]]></title><description><![CDATA[<p>Ich habe folgendes Problem beim Benutzen einer map:<br />
Sagen wir es sei folgende map gegeben:</p>
<pre><code class="language-cpp">class MyClass{
  MyClass(){}
  ...
};

void f(void)
{
  map&lt;int,MyClass&gt; m;
}
</code></pre>
<p>So wird beim Zugriff auf noch nicht besetzte Schlüssel</p>
<pre><code class="language-cpp">MyClass x = m[10];
</code></pre>
<p>ja bekanntlich der Defaultkonstruktor, also <strong>MyClass::MyClass()</strong> aufgerufen.</p>
<p>Was aber geschieht nun, wenn ich diesem Wert etwas zuweise nachdem dies geschehen ist, bzw. wie kann ich auf das Geschehen Einflusss nehmen:</p>
<pre><code class="language-cpp">m[10] = *new MyClass();
</code></pre>
<p>Wird in diesem Fall erst der Destruktor des Objekts in m[10] aufgerufen und dann einfach der Verweis auf das neue Objekt verlegt oder wird hier der Zuweisungsoperator von MyClass aufgerufen?</p>
<p>Vor allem: Wie kann ich's ändern wenn's mir so nich passt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142782/map-defaultkonstuktor-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 15:50:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142782.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Apr 2006 19:50:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to map + Defaultkonstuktor&#x2F;Destruktor on Sun, 02 Apr 2006 19:51:20 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Problem beim Benutzen einer map:<br />
Sagen wir es sei folgende map gegeben:</p>
<pre><code class="language-cpp">class MyClass{
  MyClass(){}
  ...
};

void f(void)
{
  map&lt;int,MyClass&gt; m;
}
</code></pre>
<p>So wird beim Zugriff auf noch nicht besetzte Schlüssel</p>
<pre><code class="language-cpp">MyClass x = m[10];
</code></pre>
<p>ja bekanntlich der Defaultkonstruktor, also <strong>MyClass::MyClass()</strong> aufgerufen.</p>
<p>Was aber geschieht nun, wenn ich diesem Wert etwas zuweise nachdem dies geschehen ist, bzw. wie kann ich auf das Geschehen Einflusss nehmen:</p>
<pre><code class="language-cpp">m[10] = *new MyClass();
</code></pre>
<p>Wird in diesem Fall erst der Destruktor des Objekts in m[10] aufgerufen und dann einfach der Verweis auf das neue Objekt verlegt oder wird hier der Zuweisungsoperator von MyClass aufgerufen?</p>
<p>Vor allem: Wie kann ich's ändern wenn's mir so nich passt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1029402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1029402</guid><dc:creator><![CDATA[nirsaja]]></dc:creator><pubDate>Sun, 02 Apr 2006 19:51:20 GMT</pubDate></item><item><title><![CDATA[Reply to map + Defaultkonstuktor&#x2F;Destruktor on Sun, 02 Apr 2006 21:48:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">m[10] = *new MyClass();
</code></pre>
<p>Hier wird ein Objekt des Typs MyClass auf dem Heap erzeugt und der Copy-operator aufgerufen, um das Objekt zu kopieren. Der Zeiger auf das erzeugte MyClass wird verworfen. Damit hast Du ein Speicherleck. Was Du wohl meinst ist:</p>
<pre><code class="language-cpp">m[10] = MyClass();
</code></pre>
<p>Hier wird ein Objekt des Typs MyClass auf dem Stack erzeugt (was sogar schneller geht) und mit dem Copy-Konstruktor kopiert. Das ursprüngliche Objet wird vom Stack entfernt und dabei der Destruktor aufgerufen.</p>
<p>Tommi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1029442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1029442</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Sun, 02 Apr 2006 21:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to map + Defaultkonstuktor&#x2F;Destruktor on Mon, 03 Apr 2006 06:51:33 GMT]]></title><description><![CDATA[<blockquote>
<p>Was Du wohl meinst ist:</p>
</blockquote>
<p>Ne, genau das(Loch) meine ich.</p>
<p>Ich möchte aber nicht &quot;by value&quot; die Objekte speichern. Insofern kommen wohl nur Zeiger in Frage, da die map ja wohl Probleme mit Referenzen hat, nicht wahr?!?</p>
<pre><code class="language-cpp">class MyClass{
  MyClass(){}
  ...
};

void f(void)
{
  map&lt;int,MyClass*&gt; m;
}
</code></pre>
<p>Werden hier dann die Zeiger mit NULL initialisiert wenn ich auf unbesetzte Felder zugreife?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1029489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1029489</guid><dc:creator><![CDATA[nirsaja]]></dc:creator><pubDate>Mon, 03 Apr 2006 06:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to map + Defaultkonstuktor&#x2F;Destruktor on Mon, 03 Apr 2006 07:02:36 GMT]]></title><description><![CDATA[<p>Ich denke ja. Und du mußt daran denken, die Zeiger am Ende der Arbeit wieder freizugeben:</p>
<pre><code class="language-cpp">map&lt;int,MyClass*&gt; m
m[10] = new MyClass();
m[20] = new MyClass(4711);
...

//Freigabe - muß passieren, bevor m aus dem Scope fällt:
for(map&lt;int,MyClass*&gt;::iterator pos=m.begin();pos!=m.end();++pos)
  delete pos-&gt;second;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1029493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1029493</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 03 Apr 2006 07:02:36 GMT</pubDate></item></channel></rss>