<?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[vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung]]></title><description><![CDATA[<p>Hi,</p>
<p>beim Löschen bekomm ich einen Seg.fault.<br />
Woran liegt das?</p>
<pre><code class="language-cpp">std::vector&lt;ant*&gt; vAnts;

...
...

    for(unsigned int i=0; i&lt;NUMBER_ANTS; i++)
    {
        vAnts.push_back(new ant(0));
    }

...
...
//ab hier gibts Probleme!
    for(int i=0;i&lt;vAnts.size();i++)
    {
        delete vAnts[i];
        vAnts[i]=0;
    }

    vAnts.clear();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/290168/vector-lt-object-gt-aus-dem-speicher-löschen-gt-speicherverletzung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 16:48:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290168.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Jul 2011 18:11:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:11:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>beim Löschen bekomm ich einen Seg.fault.<br />
Woran liegt das?</p>
<pre><code class="language-cpp">std::vector&lt;ant*&gt; vAnts;

...
...

    for(unsigned int i=0; i&lt;NUMBER_ANTS; i++)
    {
        vAnts.push_back(new ant(0));
    }

...
...
//ab hier gibts Probleme!
    for(int i=0;i&lt;vAnts.size();i++)
    {
        delete vAnts[i];
        vAnts[i]=0;
    }

    vAnts.clear();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2095567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095567</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:11:44 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:14:23 GMT]]></title><description><![CDATA[<p>Der Code sieht aus den ersten Blick richtig aus, auch wenn das 0-setzen der Zeiger absolut unnötig ist. Zeig doch mal her, was ant überhaupt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095572</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:14:23 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:15:22 GMT]]></title><description><![CDATA[<p>Kannst du ein <strong>minimales, aber vollständiges</strong> Beispiel posten, in dem dein Fehler immer noch auftritt?</p>
<p>Gibt es überhaupt einen Grund, wieso du nicht <code>std::vector&lt;ant&gt;</code> (also ohne Zeiger) verwendest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095575</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:32:23 GMT]]></title><description><![CDATA[<p>Minimalbsp. wird schwierig, da das ganze eine GUI Anwendung ist und daher recht verstrickt ist.<br />
Ein Zugriff erfolgt zum Beispiel auf die Art und Weise:</p>
<pre><code class="language-cpp">for(unsigned int i=0; i&lt;vAnts.size(); i++)
        {
            vAnts[i]-&gt;drawTheAnt(dc);
        }
</code></pre>
<p>Hier ein anderer Zugriff, zuerst vector auslesen, dann leeren und dann neu befüllen.</p>
<pre><code class="language-cpp">int maxFullness=0, currentFullness;
        double bestWeight[NUMBER_OUTPUT][SEIGHT_LENGTH*SEIGHT_HEIGHT];

        for(int i; i&lt;vAnts.size(); i++)
        {
            currentFullness=vAnts[i]-&gt;getFullness();
            if(currentFullness&gt;maxFullness)
            {
                currentFullness=vAnts[i]-&gt;getFullness();
                memcpy(bestWeight,vAnts[i]-&gt;getBrain()-&gt;getWeight(),NUMBER_OUTPUT*SEIGHT_LENGTH*SEIGHT_HEIGHT*sizeof(double));//müsste evtl. nur einmal passieren!
            }

        }

        for(int i=0;i&lt;vAnts.size();i++)
        {
           delete vAnts[i];
        }
        vAnts.clear();

        for(unsigned int i=0; i&lt;NUMBER_ANTS; i++)
        {
            vAnts.push_back(new ant((double**)bestWeight));
        }
</code></pre>
<p>vector&lt;ant*&gt; deshalb, weil ich die ant's während der Laufzeit manchmal rauslösche und neu befüllen möchte. Also brauch ich new, und der gibt mir einen Zeiger auf die erzeugte Instanz zurück, daher ant*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095583</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:31:25 GMT]]></title><description><![CDATA[<p>Glutamat schrieb:</p>
<blockquote>
<p>vector&lt;ant*&gt; deshalb, weil ich die ant's während der Laufzeit manchmal rauslösche und neu befüllen möchte. Also brauch ich new, und der gibt mir einen Zeiger auf die erzeugte Instanz zurück, daher ant*.</p>
</blockquote>
<p>Das geht auch auf dem &quot;normalen&quot; Weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095585</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:32:09 GMT]]></title><description><![CDATA[<p>Du kannst auch einen normalen vector&lt;&gt; umbauen, wenn du seinen Inhalt ändern willst (Stichwort: insert()/erase()). Wenn du Angst vor dem dabei nötigen Umkopieren der Elemente hast, kannst du auch einen anderen Comtainer verwenden, z.B. std::list&lt;&gt;.<br />
Ansonsten kommt der SegFault womöglich daher, daß du irgendwo etwas dort reingepackt hast, was nicht per new angelegt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095587</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:32:09 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:38:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for(int i; i&lt;vAnts.size(); i++)
</code></pre>
<p>Nicht gut, schau dir das nochmals genau an.</p>
<p>Warum manchmal <code>int</code> und manchmal <code>unsigned int</code> ? Warum keine Iteratoren?</p>
<p>P.S.:</p>
<pre><code class="language-cpp">memcpy(bestWeight,vAnts[i]-&gt;getBrain()-&gt;getWeight(),NUMBER_OUTPUT*SEIGHT_LENGTH*SEIGHT_HEIGHT*sizeof(double));
</code></pre>
<p>Das geht sicher auch einfacher, z.B. mit <code>std::copy()</code> .</p>
<pre><code class="language-cpp">vAnts.push_back(new ant((double**)bestWeight));
</code></pre>
<p>Diesen Cast brauchst du auch kaum. Wenn doch (unwahrscheinlich), mach die Gewaltanwendung wenigstens mit <code>reinterpret_cast</code> deutlich!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095592</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:38:39 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:38:14 GMT]]></title><description><![CDATA[<p>Und auch wenn man für Zugriffe keine Iteratoren nutzt, so nutze man <code>std::size_t</code> (statt <code>int</code> oder ähnliches).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095594</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:39:16 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Und auch wenn man für Zugriffe keine Iteratoren nutzt, so nutze man <code>std::size_t</code> (statt <code>int</code> oder ähnliches).</p>
</blockquote>
<p>Wenn du mir so kommst, nein. Dann nimmt man std::vector&lt;T&gt;::size_type :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095595</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:47:28 GMT]]></title><description><![CDATA[<p>Danke erstmal für eure AW!<br />
Werde die Tipps noch umsetzen, dachte aber vielleicht hilft der gesamte Code der Klasse weiter!? So groß ist sie ja eh nicht:</p>
<p>HEADER</p>
<pre><code class="language-cpp">class controller
{
    public:
        controller();
        virtual ~controller();
        void drawTheSim(wxPaintDC *dc);
        void doTheSim();
        void start();
        bool isRunning();
    protected:

        std::vector&lt;ant*&gt; vAnts;
        std::vector&lt;food*&gt; vFood;
        int timeElapsed;
        bool simRunning;
    private:
};
</code></pre>
<p>SOURCE</p>
<pre><code class="language-cpp">controller::controller()
{
    //ctor
    srand(time(0));

    for(std::size_t i=0; i&lt;NUMBER_ANTS; i++)
    {
        vAnts.push_back(new ant(0));
    }

    for(std::size_t i=0; i&lt;NUMBER_FOOD; i++)
    {
        vFood.push_back(new food());
    }

    simRunning=false;
    timeElapsed=0;

}

controller::~controller()
{

    for(std::size_t i=0;i&lt;vAnts.size();i++)
    {
        delete vAnts[i];
    }

    for(std::size_t i=0;i&lt;vFood.size();i++)
    {
        delete vFood[i];
    }

    vAnts.clear();
    vFood.clear();
}

void controller::doTheSim()
{
    for(std::size_t i=0; i&lt;vAnts.size(); i++)
    {
        vAnts[i]-&gt;moveOn(vFood);
    }

    if(timeElapsed&gt;=playTime)
    {
        int maxFullness=0, currentFullness;
        double bestWeight[NUMBER_OUTPUT][SEIGHT_LENGTH*SEIGHT_HEIGHT];

        for(std::size_t i=0; i&lt;vAnts.size(); i++)
        {
            currentFullness=vAnts[i]-&gt;getFullness();
            if(currentFullness&gt;maxFullness)
            {
                currentFullness=vAnts[i]-&gt;getFullness();
                memcpy(bestWeight,vAnts[i]-&gt;getBrain()-&gt;getWeight(),NUMBER_OUTPUT*SEIGHT_LENGTH*SEIGHT_HEIGHT*sizeof(double));

            }

        }

        for(std::size_t i=0;i&lt;vAnts.size();i++)
        {
           delete vAnts[i];
        }
        vAnts.clear();

        for(std::size_t i=0; i&lt;NUMBER_ANTS; i++)
        {
            vAnts.push_back(new ant((double**)bestWeight));
        }

        simRunning=false;
        timeElapsed=0;
    }

    timeElapsed++;
}

void controller::drawTheSim(wxPaintDC *dc)
{
    if(isRunning())
    {
        wxColor color;

        color.Set(250,170,70,255);
        dc-&gt;SetBrush(wxBrush(color));
        dc-&gt;DrawRectangle(0,0,PANEL_X+ANT_SPEED,PANEL_Y+ANT_SPEED);

        for(unsigned int i=0; i&lt;vAnts.size(); i++)
        {
            vAnts[i]-&gt;drawTheAnt(dc);
        }

        for(unsigned int i=0; i&lt;vFood.size(); i++)
        {
            vFood[i]-&gt;drawTheFood(dc);
        }
    }
    else
    {
        dc-&gt;DrawText( _(&quot;New Generation&quot;), 0, 0);
    }

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2095601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095601</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:48:42 GMT]]></title><description><![CDATA[<p>Nexus hat dir das Problem schon gezeigt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095602</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:53:58 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nexus hat dir das Problem schon gezeigt...</p>
</blockquote>
<p>Auf Zeiger verzichten?<br />
Wie soll das gehen? Wie kann ich dynamisch den vector befüllen und entleeren mit ant Elementen, ohne auf new/delete zurückzugreifen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095608</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:53:58 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 18:56:13 GMT]]></title><description><![CDATA[<p>Glutamat schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nexus hat dir das Problem schon gezeigt...</p>
</blockquote>
<p>Auf Zeiger verzichten?<br />
Wie soll das gehen? Wie kann ich dynamisch den vector befüllen und entleeren mit ant Elementen, ohne auf new/delete zurückzugreifen?</p>
</blockquote>
<p>statt<br />
vec.push_back(new ant(1));<br />
einfach<br />
vec.push_back(ant(1));<br />
schreiben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095610</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 20 Jul 2011 18:56:13 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 19:04:26 GMT]]></title><description><![CDATA[<p>Glutamat schrieb:</p>
<blockquote>
<p>Auf Zeiger verzichten?</p>
</blockquote>
<p>Nein, lies nochmals meinen Post.</p>
<p>Wobei auf Zeiger und manuelle Speicherverwaltung verzichten sowieso eine gute Idee ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095619</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 20 Jul 2011 19:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 19:06:03 GMT]]></title><description><![CDATA[<p>Falls du (Glutamat) es noch nicht gewusst hast: Ein <code>std::vector</code> mit seinem Standard-Allokator bezieht seinen Speicher auch von Heap (also mit <code>new</code> und <code>delete</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095623</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Jul 2011 19:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 19:20:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Falls du (Glutamat) es noch nicht gewusst hast: Ein std::vector mit seinem Standard-Allokator bezieht seinen Speicher auch von Heap (also mit new und delete).</p>
</blockquote>
<pre><code class="language-cpp">vAnts.push_back(ant(0));
</code></pre>
<p>OK, wie funktioniert das nun im Detail? Eine Instanz einer Klasse wird erstellt mit ant(0). vector reserviert Speicher am Heap und macht eine 1:1 Kopie meiner Instanz. Richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095629</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Jul 2011 19:20:10 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 19:21:55 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Glutamat schrieb:</p>
<blockquote>
<p>Auf Zeiger verzichten?</p>
</blockquote>
<p>Nein, lies nochmals meinen Post.</p>
<p>Wobei auf Zeiger und manuelle Speicherverwaltung verzichten sowieso eine gute Idee ist.</p>
</blockquote>
<p>Was meinst du damit? Das mit dem nicht initialisierten i in der for Schleife? Schon erledigt, das wars nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095636</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 20 Jul 2011 19:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Wed, 20 Jul 2011 19:28:40 GMT]]></title><description><![CDATA[<p>Glutamat schrieb:</p>
<blockquote>
<p>OK, wie funktioniert das nun im Detail? Eine Instanz einer Klasse wird erstellt mit ant(0). vector reserviert Speicher am Heap und macht eine 1:1 Kopie meiner Instanz. Richtig?</p>
</blockquote>
<p>Ja, kommt hin. Wobei der Compiler eventuell(?) das Ganze noch soweit optimieren kann, daß der vector&lt;&gt; erst den Speicher reserviert und dann deine Instanz dort direkt erstellt.</p>
<p>Edit: Und was ein großes Problem sein könnte, ist der Cast des Arrays in einen Doppelzeiger - so weit geht die Verwandschaft zwischen Zeigern und Array nicht, daß du dort etwas sinnvolles erwarten kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095642</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 20 Jul 2011 19:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Thu, 21 Jul 2011 06:08:48 GMT]]></title><description><![CDATA[<p>Glutamat schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Nexus hat dir das Problem schon gezeigt...</p>
</blockquote>
<p>Auf Zeiger verzichten?<br />
Wie soll das gehen? Wie kann ich dynamisch den vector befüllen und entleeren mit ant Elementen, ohne auf new/delete zurückzugreifen?</p>
</blockquote>
<p>oder machs mit einem pointer container, boost hat ptr_vector (oder so ähnlich)<br />
der löscht die objekte automatisch. oder nimm std::vector&lt; std::shared_ptr&lt;Ant&gt; &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095821</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 21 Jul 2011 06:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Thu, 21 Jul 2011 06:20:20 GMT]]></title><description><![CDATA[<p>Wie sind denn ant und food deklariert? Sind da evtl. die großen 3 notwendig und implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095828</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 21 Jul 2011 06:20:20 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;*object&amp;gt; aus dem Speicher löschen=&amp;gt;Speicherverletzung on Thu, 21 Jul 2011 11:20:10 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>oder machs mit einem pointer container, boost hat ptr_vector (oder so ähnlich)<br />
der löscht die objekte automatisch. oder nimm std::vector&lt; std::shared_ptr&lt;Ant&gt; &gt;</p>
</blockquote>
<p>Nein, nimm wenn möglich Objekte. Die zusätzliche Indirektion ist normalerweise unnötig. Und der Overhead für Shared-Ownership erst recht...</p>
<p><code>ptr_vector&lt;T&gt;</code> kann man nehmen, falls man besitzende Zeiger braucht (z.B. nicht- bzw. teuer kopierbare oder polymorphe Objekte). <code>vector&lt;shared_ptr&lt;T&gt;&gt;</code> ist angebracht, falls die Objekte noch irgendwo ausserhalb referenziert werden, wo ebenfalls ein Besitzanspruch vorhanden ist. Das kommt aber eher selten vor...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2096002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2096002</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 21 Jul 2011 11:20:10 GMT</pubDate></item></channel></rss>