<?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[liste von pointern kopieren.]]></title><description><![CDATA[<p>guten tag, ich habe folgendes problem:</p>
<p>ich habe in einer klasse eine private liste</p>
<pre><code class="language-cpp">private:
    list&lt;CMyClass*&gt; m_MyList;
</code></pre>
<p>und einen konstanten öffentlichen getter</p>
<pre><code class="language-cpp">public:
    list&lt;CMyClass*&gt; getMyList() const;
</code></pre>
<p>der m_MyList zurückgibt (return m_MyList).</p>
<p>jetzt brauche ich eine kopie dieser liste. ich dachte ich mache es folgendermaßen:</p>
<pre><code class="language-cpp">list&lt;CMyClass*&gt; myList = getMyList();
    for(list&lt;CMyClass*&gt;::const_iterator it = myList.begin(); it != myList.end(); it++) {
        // hier setze ich werte, die ich eigentlich nur lokal brauche...
        (*it)-&gt;setPosition(myVar);
    }
</code></pre>
<p>leider muss ich feststellen, dass die werte die ich in der for-schleife setze, tatsächlich in der echten m_MyList ankommen!<br />
dh. meine original-werte in m_MyList werden überschrieben, was nicht sein darf!</p>
<p>wie bekomme ich denn ansonsten eine nur lokal gültige kopie meiner liste, wenn nicht so??</p>
<p>vielen dank und schöne grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185581/liste-von-pointern-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 05:36:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185581.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jun 2007 08:37:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 08:37:30 GMT]]></title><description><![CDATA[<p>guten tag, ich habe folgendes problem:</p>
<p>ich habe in einer klasse eine private liste</p>
<pre><code class="language-cpp">private:
    list&lt;CMyClass*&gt; m_MyList;
</code></pre>
<p>und einen konstanten öffentlichen getter</p>
<pre><code class="language-cpp">public:
    list&lt;CMyClass*&gt; getMyList() const;
</code></pre>
<p>der m_MyList zurückgibt (return m_MyList).</p>
<p>jetzt brauche ich eine kopie dieser liste. ich dachte ich mache es folgendermaßen:</p>
<pre><code class="language-cpp">list&lt;CMyClass*&gt; myList = getMyList();
    for(list&lt;CMyClass*&gt;::const_iterator it = myList.begin(); it != myList.end(); it++) {
        // hier setze ich werte, die ich eigentlich nur lokal brauche...
        (*it)-&gt;setPosition(myVar);
    }
</code></pre>
<p>leider muss ich feststellen, dass die werte die ich in der for-schleife setze, tatsächlich in der echten m_MyList ankommen!<br />
dh. meine original-werte in m_MyList werden überschrieben, was nicht sein darf!</p>
<p>wie bekomme ich denn ansonsten eine nur lokal gültige kopie meiner liste, wenn nicht so??</p>
<p>vielen dank und schöne grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314550</guid><dc:creator><![CDATA[meiname]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:37:30 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 08:41:02 GMT]]></title><description><![CDATA[<p>Der Copy-Ctor der list&lt;&gt; kopiert nur die Elemente IN der Liste, das heißt in deinem Fall die Adressen, die dort eingetragen sind. Darum, die Objekte hinter diesen Adressen zu kopieren, mußt du dich selber kümmern (Randfrage: Von wo bekommst du deine CMyClass-Objekte? Und warum muß es unbedingt eine Liste von Zeigern sein?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314554</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:41:02 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 08:41:37 GMT]]></title><description><![CDATA[<p>du kopierst die pointer in deiner liste....</p>
<p>und hast so auf die objekt zugriff aus der original liste...</p>
<p>und überschreibst so die orginal objekte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314555</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 08:51:23 GMT]]></title><description><![CDATA[<p>dh wenn ich eine kopie der daten haben will, muss ich die pointer dereferenziert in eine lokale liste schreiben?</p>
<p>cstoll: die liste wird an einer anderen stelle mit pointern auf objekte der klasse CMyClass gefüllt, für uns macht diese konstruktion an dieser stelle tatsächlich sinn, ich müsste jedoch zu weit ausholen um dies zu erleutern..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314563</guid><dc:creator><![CDATA[meiname]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 08:54:35 GMT]]></title><description><![CDATA[<p>kopie:</p>
<pre><code class="language-cpp">list&lt;CMyClass&gt; tmp;
for(list&lt;CMyClass*&gt;::const_iterator it = m_MyList.begin(); it != m_MyList.end(); it++) { 
     //Kopie erstellen
     tmp.push_back(*(*it));   
 }
</code></pre>
<p>kopie iterieren:</p>
<pre><code class="language-cpp">for(list&lt;CMyClass&gt;::const_iterator it = tmp.begin(); it != tmp.end(); it++) { 
   it.setPosition(myVar);
 }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1314566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314566</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:54:35 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 08:55:34 GMT]]></title><description><![CDATA[<p>meiname schrieb:</p>
<blockquote>
<p>dh wenn ich eine kopie der daten haben will, muss ich die pointer dereferenziert in eine lokale liste schreiben?</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>cstoll: die liste wird an einer anderen stelle mit pointern auf objekte der klasse CMyClass gefüllt, für uns macht diese konstruktion an dieser stelle tatsächlich sinn, ich müsste jedoch zu weit ausholen um dies zu erleutern..</p>
</blockquote>
<p>OK, wenn es Sinn macht, will ich nichts gesagt haben. Aber mir fallen auf Anhieb nur drei Gründe ein, so etwas machen zu wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314567</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:55:34 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Wed, 27 Jun 2007 09:00:24 GMT]]></title><description><![CDATA[<p>ah in ordnung, das verstehe ich.. klingt plausiebel! vielen dank euch beiden!</p>
<p>noch eine frage, gibt es einen unterschied zwischen tmp.push_back(*(*it)) und tmp.push_back(**it)? ich sehe da jetzt direkt keinen, oder?</p>
<p>cstoll: das hier ist bestimmt einer deiner drei gründe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314572</guid><dc:creator><![CDATA[meiname]]></dc:creator><pubDate>Wed, 27 Jun 2007 09:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Fri, 29 Jun 2007 05:53:48 GMT]]></title><description><![CDATA[<p>soviel ich weis (sorry wenn ich mich irre) ist in der iterator Klasse der operator*() überschieben, welcher nich den Inhalt des Iterator Objekt zurückliefst, sondern da Objekt der Objektliste welche iterierst wird. Mit dem weitern sterh wird ja dann der inhalt des Objektzeiger zurückgeben... deswegen kapsele ich das mit Klammern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314625</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 29 Jun 2007 05:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Fri, 29 Jun 2007 06:08:03 GMT]]></title><description><![CDATA[<p>meiname schrieb:</p>
<blockquote>
<p>noch eine frage, gibt es einen unterschied zwischen tmp.push_back(*(*it)) und tmp.push_back(**it)? ich sehe da jetzt direkt keinen, oder?</p>
</blockquote>
<p>Eigentlich nicht - die Dereferenzierung steht sowieso schon recht weit oben auf der Rangliste, da mußt du nur Klammern setzen, wenn du auf das dereferenzierte Objekt einen höheren Operator anwenden willst (z.B. Post-Inkrement oder Member-Zugriff).</p>
<blockquote>
<p>cstoll: das hier ist bestimmt einer deiner drei gründe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
</blockquote>
<p>Mal sehen. Die drei Gründe wären:</p>
<ol>
<li>Polymorphie</li>
<li>Objekte müssen in mehreren Containern parallel verwaltet werden</li>
<li>das Kopieren der Objekte ist extrem aufwendig oder technisch nicht möglich</li>
</ol>
<p>Ist deiner dabei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314630</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 29 Jun 2007 06:08:03 GMT</pubDate></item><item><title><![CDATA[Reply to liste von pointern kopieren. on Fri, 29 Jun 2007 09:13:28 GMT]]></title><description><![CDATA[<p>schön, dass das forum wieder läuft..</p>
<p>das dereferenzieren hat funktioniert und mich ein gutes stück weiter gebracht. vielen dank euch beiden für die erstaunlich schnellen antworten und die mühe!!</p>
<p>ja und wir haben tatsächlich sogar zwei deiner gründe hier angewandt. zum einen gibt es polymorphe klassen und zum anderen werden auch die objekte anderer klassen parallel in listen, also containern verwaltet. das macht es für mich auch so kompliziert, da ich noch nicht sehr lange im job bin und auch recht wenig erfahrung mit c++ habe.</p>
<p>also, nochmal vielen dank und schöne grüße aus dem rheinland!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314756</guid><dc:creator><![CDATA[meiname]]></dc:creator><pubDate>Fri, 29 Jun 2007 09:13:28 GMT</pubDate></item></channel></rss>