<?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[STL Map mit Zeigern]]></title><description><![CDATA[<p>Moin!</p>
<p>ich habe eine Map, die so aussieht: map&lt;string, A*&gt; myMap;</p>
<p>Wenn ich mir den Iterator besorge (map&lt;string, A*&gt;::iterator myIt), kann ich ja mittels &quot;second&quot; auf den zeiger und damit weiter auf die public-Eigenschaften der Klasse A zugreifen.</p>
<p>Vorher muss ich jedoch ein Objekt der Klasse A dynamisch mit new erzeugen.<br />
Jetzt taucht aber ein Problem auf - nämlich beim Löschen der Objekte:</p>
<p>Wenn ich mit einer for-Schleife über die map iteriere, lösche ich die einzelnen Objekte mit &quot;delete myIt-&gt;second&quot;. Gibt auch keinen Fehler beim compilieren.<br />
Wenn ich nun noch einmal auf die Objekte zugreifen würde, müsste es ja einen fehler geben - gibt es aber nicht!!!<br />
Ich kann nach wie vor auf den Objekten über die Zeiger in der Map arbeiten.<br />
Kann mir jemand sagen, wo mein Fehler liegt? Oder ob das normal ist?!</p>
<p>Gruß<br />
Sdy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236495/stl-map-mit-zeigern</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 23:02:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236495.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Mar 2009 10:24:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 10:24:48 GMT]]></title><description><![CDATA[<p>Moin!</p>
<p>ich habe eine Map, die so aussieht: map&lt;string, A*&gt; myMap;</p>
<p>Wenn ich mir den Iterator besorge (map&lt;string, A*&gt;::iterator myIt), kann ich ja mittels &quot;second&quot; auf den zeiger und damit weiter auf die public-Eigenschaften der Klasse A zugreifen.</p>
<p>Vorher muss ich jedoch ein Objekt der Klasse A dynamisch mit new erzeugen.<br />
Jetzt taucht aber ein Problem auf - nämlich beim Löschen der Objekte:</p>
<p>Wenn ich mit einer for-Schleife über die map iteriere, lösche ich die einzelnen Objekte mit &quot;delete myIt-&gt;second&quot;. Gibt auch keinen Fehler beim compilieren.<br />
Wenn ich nun noch einmal auf die Objekte zugreifen würde, müsste es ja einen fehler geben - gibt es aber nicht!!!<br />
Ich kann nach wie vor auf den Objekten über die Zeiger in der Map arbeiten.<br />
Kann mir jemand sagen, wo mein Fehler liegt? Oder ob das normal ist?!</p>
<p>Gruß<br />
Sdy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680734</guid><dc:creator><![CDATA[sheddy]]></dc:creator><pubDate>Mon, 16 Mar 2009 10:24:48 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 10:31:20 GMT]]></title><description><![CDATA[<p>sheddy schrieb:</p>
<blockquote>
<p>Wenn ich mit einer for-Schleife über die map iteriere, lösche ich die einzelnen Objekte mit &quot;delete myIt-&gt;second&quot;. Gibt auch keinen Fehler beim compilieren.</p>
</blockquote>
<p>Ist auch okay...</p>
<p>sheddy schrieb:</p>
<blockquote>
<p>Wenn ich nun noch einmal auf die Objekte zugreifen würde, müsste es ja einen fehler geben - gibt es aber nicht!!!</p>
</blockquote>
<p>Nein, muss es nicht. Es ist schlicht und ergreifend undefiniert.</p>
<p>Ein auf einen Zeiger angewendetes delete ruft den Destruktor auf und gibt den Speicher frei, verändert aber den Speicherbereich nicht zwangsweise. Das heißt, wenn du über diesen Zeiger zugreifst, und noch nichts anderes dessen Platz eingenommen hat, du durchaus auf die &quot;Reste&quot; heran kommst.</p>
<p>Aber wie gesagt: Dies ist undefiniertes Verhalten, man sollte sich nicht darauf verlassen. Wenn du tatsächlich einen Fall hast, in dem du die Zeiger als ungültig markieren willst, setze sie nach dem delete auf NULL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680738</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 16 Mar 2009 10:31:20 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 11:47:41 GMT]]></title><description><![CDATA[<p>okay, alles klar! wollte nur sicher gehen, dass der Platz wirklich wieder freigegebn wurde.</p>
<p>Die Klasse A hat einen string (&lt;string&gt;) als Eigenschaft! muss ich den irgendwie explizit freigeben? Den String lasse ich im Konstuktor initialisieren und rufe ihn nicht mit &quot;new string()&quot; auf.</p>
<p>Denn wenn ich den zeiger für das Objekt A lösche, kann ich auf den String danach noch drauf zugreifen <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="😃"
    /> Auf andere Eigenschaften wie z.B. Integer wird irgendeine Zahl und nicht die damals im Objekt gespeicherte ausgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680775</guid><dc:creator><![CDATA[sheddy]]></dc:creator><pubDate>Mon, 16 Mar 2009 11:47:41 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 11:54:54 GMT]]></title><description><![CDATA[<p>edit:Sorry hab das &quot;nicht&quot; überlesen. Wenn du mit solchen &quot;verschachtelten&quot; Zeigerkonstrukten arbeitest,wäre es eventuell angebracht den <code>boost::shared_ptr</code> oder sogar eventuell <code>boost::ptr_map</code> zu nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680778</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 16 Mar 2009 11:54:54 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 11:54:00 GMT]]></title><description><![CDATA[<p>sheddy schrieb:</p>
<blockquote>
<p>Die Klasse A hat einen string (&lt;string&gt;) als Eigenschaft! muss ich den irgendwie explizit freigeben?</p>
</blockquote>
<p>Nein, musst Du nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680779</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Mon, 16 Mar 2009 11:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 12:46:11 GMT]]></title><description><![CDATA[<p>vielen dank!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15364">@firefighter</a>: Was hat die boost-bibliothek für einen vorteil? Ich habe gerade mal <strong>kurz</strong> nach geguckt und irgendwie konnte ICH auf die schnelle nichts brauchbares finden <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="😃"
    /><br />
Kannst kurz sagen, was die bibliothek für ein vorteil hat? Ist es einfach nur einfacher damit zu programmieren oder sind die einzelnen dinger wie container wie z.b. deine vorgeschlagene map besser implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680807</guid><dc:creator><![CDATA[sheddy]]></dc:creator><pubDate>Mon, 16 Mar 2009 12:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 12:51:31 GMT]]></title><description><![CDATA[<p>sheddy schrieb:</p>
<blockquote>
<p>Die Klasse A hat einen string (&lt;string&gt;) als Eigenschaft! muss ich den irgendwie explizit freigeben? Den String lasse ich im Konstuktor initialisieren und rufe ihn nicht mit &quot;new string()&quot; auf.</p>
</blockquote>
<p>In der Regel kannst du in C++ davon ausgeben, das du nur dort Speicher freigeben musst, wo du auch den Speicher anforderst (Für jedes new genau ein delete, für jedes new[] genau ein delete[]).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680810</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 16 Mar 2009 12:51:31 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 12:59:59 GMT]]></title><description><![CDATA[<p>sheddy schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15364">@firefighter</a>: Was hat die boost-bibliothek für einen vorteil? Ich habe gerade mal <strong>kurz</strong> nach geguckt und irgendwie konnte ICH auf die schnelle nichts brauchbares finden <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>
</blockquote>
<p>Die Boost-Bibliothek ist eine der IMHO mächtigsten portablen Bibliothekssammlungen zu C++ (Zum Teil sind diese Bereits für den nächsten Standard vorgeschlagen). Beispiele für <a href="http://www.boost.org/doc/libs/1_38_0" rel="nofollow">Bibliotheken</a> die ich häufiger verwende: Bind, Functional, Smart Ptr... (und auch die Pointer Container Library die für dich interessant sein könnte sind durchaus interessant).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680815</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 16 Mar 2009 12:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL Map mit Zeigern on Mon, 16 Mar 2009 13:04:54 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>sheddy schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15364">@firefighter</a>: Was hat die boost-bibliothek für einen vorteil? Ich habe gerade mal <strong>kurz</strong> nach geguckt und irgendwie konnte ICH auf die schnelle nichts brauchbares finden <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>
</blockquote>
<p>Die Boost-Bibliothek ist eine der IMHO mächtigsten portablen Bibliothekssammlungen zu C++ (Zum Teil sind diese Bereits für den nächsten Standard vorgeschlagen). Beispiele für <a href="http://www.boost.org/doc/libs/1_38_0" rel="nofollow">Bibliotheken</a> die ich häufiger verwende: Bind, Functional, Smart Ptr... (und auch die Pointer Container Library die für dich interessant sein könnte sind durchaus interessant).</p>
</blockquote>
<p>Und auch so tolle Sachen wie nahezu plattformunabhängige Threads oder Netzwerkkommunikation sind enthalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680821</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 16 Mar 2009 13:04:54 GMT</pubDate></item></channel></rss>