<?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[Löscht std::vector seine Elemente am Ende aus dem Speicher?]]></title><description><![CDATA[<p>Halli Hallo,</p>
<p>folgender Sachverhalt:</p>
<pre><code class="language-cpp">struct stXY
{
       float x;
       float y;

       stXY(float fx, float fy)
       {
          x = fx;
          y = fy;
       };
};

funktionsrumpf
{
   std::vector&lt;stXY*&gt; Vec;

   Vec.push_back(new stXY(0.0, 0.1));
   Vec.push_back(new stXY(0.1, 0.2));
   Vec.push_back(new stXY(0.2, 0.3));
}
</code></pre>
<p>Was passiert mit den stXY* nach dem verlassen der Funktion? Werden die nur aus dem Vector gelöscht oder auch im Speicher zerstört? Wenn nicht, dann müßte man ja am Ende nochmal durch den Vector durchiterieren und alle Elemente getrennt deleten.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215090/löscht-std-vector-seine-elemente-am-ende-aus-dem-speicher</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 22:11:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215090.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 06 Jun 2008 11:22:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Löscht std::vector seine Elemente am Ende aus dem Speicher? on Fri, 06 Jun 2008 11:22:54 GMT]]></title><description><![CDATA[<p>Halli Hallo,</p>
<p>folgender Sachverhalt:</p>
<pre><code class="language-cpp">struct stXY
{
       float x;
       float y;

       stXY(float fx, float fy)
       {
          x = fx;
          y = fy;
       };
};

funktionsrumpf
{
   std::vector&lt;stXY*&gt; Vec;

   Vec.push_back(new stXY(0.0, 0.1));
   Vec.push_back(new stXY(0.1, 0.2));
   Vec.push_back(new stXY(0.2, 0.3));
}
</code></pre>
<p>Was passiert mit den stXY* nach dem verlassen der Funktion? Werden die nur aus dem Vector gelöscht oder auch im Speicher zerstört? Wenn nicht, dann müßte man ja am Ende nochmal durch den Vector durchiterieren und alle Elemente getrennt deleten.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1523982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1523982</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Fri, 06 Jun 2008 11:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to Löscht std::vector seine Elemente am Ende aus dem Speicher? on Fri, 06 Jun 2008 11:30:36 GMT]]></title><description><![CDATA[<p>Warum tust Du auch Zeiger in den Vector? <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="😉"
    /></p>
<p>Die Regel ist ganz einfach: Ein Vector löscht all seine Elemente, wenn seine Lebensdauer abgelaufen ist. Wenn das Element des Vectors T* ist, werden die Zeiger gelöscht, nicht aber das worauf sie zeigen (warum auch - oder anders: Wenn das Element des Vectors kein Zeigertyp ist, wie soll man dann das worauf es zeigt löschen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1523989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1523989</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 06 Jun 2008 11:30:36 GMT</pubDate></item><item><title><![CDATA[Reply to Löscht std::vector seine Elemente am Ende aus dem Speicher? on Fri, 06 Jun 2008 11:38:53 GMT]]></title><description><![CDATA[<p>Wie es LordJaxom gesagt hat. Wenn du trotzdem möchtest, dass der Container die Zeiger löscht und das möglichst einfach, dann gibt es wohl zwei Wege:</p>
<p>1. Mal wieder Boost: <a href="http://www.boost.org/doc/libs/1_35_0/libs/ptr_container/doc/ptr_container.html" rel="nofollow">http://www.boost.org/doc/libs/1_35_0/libs/ptr_container/doc/ptr_container.html</a></p>
<p>2. Du erstellst dir sowas:</p>
<pre><code class="language-cpp">struct SHeapDelete
{
    template&lt;typename T&gt;
    void operator ()(T*&amp; rpT)
    {
        delete rpT;
        rpT = 0;
    }
}

// Du kannst auch sowas noch erstellen:
template&lt;typename C&gt;
void heap_delete(C&amp; rContainer)
{ std::for_each(rContainer.begin(), rContainer.end(), SHeapDelete); }

// Und dann in der main:

int main()
{
    std::vector&lt;int&gt; Vec;

    Vec.push_back(new int);
    Vec.push_back(new int);
    // usw.

    std::for_each(Vec.begin(), Vec.end(), SHeapDelete);
    // oder
    heap_delete(Vec);

    return 0;
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1523998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1523998</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 06 Jun 2008 11:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Löscht std::vector seine Elemente am Ende aus dem Speicher? on Fri, 06 Jun 2008 12:50:32 GMT]]></title><description><![CDATA[<p>Alles klar. Danke. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1524055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524055</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Fri, 06 Jun 2008 12:50:32 GMT</pubDate></item></channel></rss>