<?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[for_each and delete.. ein Vergleich:]]></title><description><![CDATA[<p>Hallo hab mich mal mit for_each von listen befasst.. und zwei Varianten implementiert.. nun die frage ob das auch elegant ist:)</p>
<pre><code class="language-cpp">class AllocNode{
.
.
.
.
  Delete_Me(){
     delete this;
  }

}

class Komb{
 std::list&lt;AllocNode*&gt; LIST;

 deleteNodes(){
 //ERSION A

 for(std::list&lt;AllocNode*&gt;::iterator S= LIST.begin(); S != LIST.end();S++)
    delete *S;

//VERSION B

  std::for_each(m_lList.begin(), m_lList.end(),std::mem_fun(&amp;AllocNode::Delete_Me));

//Liste löschen
m_lList.clear();

 }
};
</code></pre>
<ol>
<li></li>
</ol>
<p>Bei version A iteriere ich die Liste selber und gebe über den iterator jedes Objekt frei, VEriosn be benutzt ich die for_each funktion, und kann sogar eine memberfunktion benutzen ohne sie Delete_Me global zu machen? Nun frage ich ob diese methodik auch gut ist, da sich das objekt selber löscht, und ich nich wie bei Version A von ausen gelöscht wird... kritik?</p>
<ol start="2">
<li></li>
</ol>
<p>Wenn ich nun Travesierungen mit forschleifen durch for_Each etc. ersetze, ereich somit eine höhere Performance?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186641/for_each-and-delete-ein-vergleich</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 10:20:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186641.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 11 Jul 2007 03:44:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:02:51 GMT]]></title><description><![CDATA[<p>Hallo hab mich mal mit for_each von listen befasst.. und zwei Varianten implementiert.. nun die frage ob das auch elegant ist:)</p>
<pre><code class="language-cpp">class AllocNode{
.
.
.
.
  Delete_Me(){
     delete this;
  }

}

class Komb{
 std::list&lt;AllocNode*&gt; LIST;

 deleteNodes(){
 //ERSION A

 for(std::list&lt;AllocNode*&gt;::iterator S= LIST.begin(); S != LIST.end();S++)
    delete *S;

//VERSION B

  std::for_each(m_lList.begin(), m_lList.end(),std::mem_fun(&amp;AllocNode::Delete_Me));

//Liste löschen
m_lList.clear();

 }
};
</code></pre>
<ol>
<li></li>
</ol>
<p>Bei version A iteriere ich die Liste selber und gebe über den iterator jedes Objekt frei, VEriosn be benutzt ich die for_each funktion, und kann sogar eine memberfunktion benutzen ohne sie Delete_Me global zu machen? Nun frage ich ob diese methodik auch gut ist, da sich das objekt selber löscht, und ich nich wie bei Version A von ausen gelöscht wird... kritik?</p>
<ol start="2">
<li></li>
</ol>
<p>Wenn ich nun Travesierungen mit forschleifen durch for_Each etc. ersetze, ereich somit eine höhere Performance?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322701</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:27:02 GMT]]></title><description><![CDATA[<p>glaub nicht, dass sich beide varianten von der performance her großartig unterscheiden werden. for_each wird intern auch nen iterator verwenden (ohne garantie ^^).</p>
<p>was ich aber nicht mag ist eine memberfunktion, die delete this verwendet. objekte, die sich selbst ins bein schiessen können sind mir suspekt ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322715</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:34:11 GMT]]></title><description><![CDATA[<p>ich mach die &quot;delete this&quot; variane auch nich gern.. aber so hab ich errreicht, das ich keine globale funktion verwenden muss..</p>
<p>Aber</p>
<pre><code class="language-cpp">AllocNode *A = new AllocNode();
A-&gt;delete_Me();
</code></pre>
<p>und</p>
<pre><code class="language-cpp">AllocNode *A = new AllocNode();
delete A;
</code></pre>
<p>sind ja aquvalent oder nich??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322719</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:40:08 GMT]]></title><description><![CDATA[<p>ja, aber was ist mit</p>
<pre><code class="language-cpp">AllocNode a;
a.delete_Me();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1322720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322720</guid><dc:creator><![CDATA[thordk]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:40:08 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:41:42 GMT]]></title><description><![CDATA[<p>hmm.. was würde da passieren?</p>
<p>Aber da Delete_Me() privat ist, und die Liste inter mit poitner verwaltet ist kann zwar ein Objekt statisch angelet werden, aber Delete_Me() nicht aufgerufen werden;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322721</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:41:42 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:44:58 GMT]]></title><description><![CDATA[<p>Wenn Delete_Me privat ist, hat for_each ein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322723</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 05:53:36 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22930">@David</a>: im Prinzip schon, weil hier im Bsp. die funktion aus Komb aufgerufen wird.. in wirklickkeit rufe ich die funktion &quot;deleteNode&quot; aus CAllocNode aus (löschen der Kindknoten) wobei die Baumstruktur aller konten über die basis Liste verwaltet werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322724</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 05:53:36 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 06:28:14 GMT]]></title><description><![CDATA[<p>Deine &quot;ERSION A&quot; ist ganz klar zu bevorzugen - immerhin sind <em>std::for_each</em> und <em>std::mem_fun</em> auch freie Funktionen, welche ja bekanntlich ganz, ganz böse sind...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322743</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 11 Jul 2007 06:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 06:41:39 GMT]]></title><description><![CDATA[<p>wenn sie so böse sind, wieso werden sie bereitgestellt... dachte &quot;VERSION B&quot; ist eleganter...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322753</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 06:41:39 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 06:44:56 GMT]]></title><description><![CDATA[<p>Die meisten C++-Programmierer sehen die Objektorientierung nicht so eng wie du <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="😃"
    /> Und da C++ nunmal keine reine OO-Sprache ist, sind globale Funktionen durchaus üblich (und weite Teile der Standardbibliothek basieren nicht auf OO, sondern auf generischer Programmierung).</p>
<p>(ich hab's dir schonmal gesagt - man kann's auch übertreiben mit der Objektorientierung ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322756</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 11 Jul 2007 06:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 06:50:12 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>wenn sie so böse sind, wieso werden sie bereitgestellt... dachte &quot;VERSION B&quot; ist eleganter...</p>
</blockquote>
<p>Vielleicht ist das bei dir nicht angekommen, aber finix' Beitrag war <em>ironisch</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322759</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 11 Jul 2007 06:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:03:44 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>: hmm...sicher? Hört sich ehr zweideutig an</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322766</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:17:21 GMT]]></title><description><![CDATA[<p>Wieso sollte eigentlich das Objekt wissen, wie es erstellt wurde? immerhin kann es ja im stack erstellt werden, mit new auf dem heap, es kann über ein placement new erstellt werden...das ist alles aufgabe der Datenstruktur die das Objekt erstellt hat, und darum sollte diese Datenstruktur auch das zerstören des objekts übernehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322780</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:17:43 GMT]]></title><description><![CDATA[<p>ja gut, dann müsste der list container ja alle elemente mit delete löschen , bevor die zeiger gekickt werden oder nich?? Wäre noch besser;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322783</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:17:43 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:25:34 GMT]]></title><description><![CDATA[<p>Version B finde ich deswegen Dreck weils 3x mehr Code ist + weniger übersichtlich = vollkommen unnötig.<br />
Nur meine Meinung.</p>
<p>Ideal wäre eine &quot;shared_ptr&quot; Liste oder ähnliches, dann tuts ein &quot;list.clear();&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322789</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:27:35 GMT]]></title><description><![CDATA[<p>Ja, das wäre wohl besser - std::list&lt;&gt; macht das allerdings nicht. Eine Alternative wäre es, in Boost nach einer ptr_list zu suchen. Ansonsten würde ich die delete_element-Funktion entweder global oder als (statische?) Methode des list-Eigentümers anlegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322791</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:28:13 GMT]]></title><description><![CDATA[<p>@hustbear: und Version B ist evtl. noch laaanngsammer;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322793</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 07:31:36 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>@hustbear: und Version B ist evtl. noch laaanngsammer;)</p>
</blockquote>
<p>Nicht unbedingt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> for_each() wird intern auch nur eine for-Schleife beinhalten, so daß der Compiler mit entsprechend guten Optimierungen (fast) identischen Code aus beiden Versionen erzeugen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322797</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 11 Jul 2007 07:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 14:25:07 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>: hmm...sicher? Hört sich ehr zweideutig an</p>
</blockquote>
<p>Ich hatte versucht es zu verschleiern aber, tatsächlich, MFK ist mir auf die Schliche gekommen. Mein Beitrag war eher als Kommentar auf deine <a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html" rel="nofollow">Furcht vor Verben</a> zu verstehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1323183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1323183</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 11 Jul 2007 14:25:07 GMT</pubDate></item><item><title><![CDATA[Reply to for_each and delete.. ein Vergleich: on Wed, 11 Jul 2007 14:29:20 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Version B finde ich deswegen Dreck weils 3x mehr Code ist + weniger übersichtlich = vollkommen unnötig.<br />
Nur meine Meinung.</p>
</blockquote>
<p>Sehe ich irgendwie genau andersherum. Die <em>Delete_Me</em>-Methode ist natürlich nicht so schön, aber ersetzt man dies durch eine freie Funktion <em>delete_foo</em> finde ich die Zeile wesentlich übersichtlicher und klarer als die Schleife.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1323188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1323188</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 11 Jul 2007 14:29:20 GMT</pubDate></item></channel></rss>