<?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[std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!)]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich erstelle 25 Instanzen (A) einer Klasse innerhalb einer Funktion, und schiebe sie in eine verkettete Liste einer anderen Klasse (B).</p>
<p>Anschließend werden 18 Instanzen dieser Klasse (B) wieder innerhalb einer Funktion erstellt und ebenfalls in eine Liste einer wiederum anderen Klasse (C) geschoben.</p>
<p>Nun wird ja jedesmal beim Verlassen einer Funktion der Destruktor einer erstellten Instanz aufgerufen. Beim Aufrufen der zweiten Funktion wird sogar nicht mal mehr ein Konstruktor der (A)-Instanzen aufgerufen, sondern nur noch der Destructor von (A), weil ja die (B) Instanzen ja beim Verlassen der Funktion wieder gelöscht werden.</p>
<p>Der statische Zähler innerhalb von A zählt jedenfalls -450 Instanzen.</p>
<p>Frage: Imo wegen oben logisch, aber (hehe) ist das gut oder schlecht?</p>
<p>Ich finde die arbeit mit Listen angenehmer als dyn. erzeugte Arrays auf dem Heap, da ich später Instanzen von A innerhalb B hin und herschiebe oder gar lösche.</p>
<p>An sich läuft alles wie erwünscht, nur daß der Destruktor eben mehrfach aufgerufen wird bringt mich ein wenig durcheinander!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208021/std-lt-list-gt-als-dyn-array-destructor-mehrfachaufruf</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 10:51:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208021.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Mar 2008 20:17:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 20:17:54 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich erstelle 25 Instanzen (A) einer Klasse innerhalb einer Funktion, und schiebe sie in eine verkettete Liste einer anderen Klasse (B).</p>
<p>Anschließend werden 18 Instanzen dieser Klasse (B) wieder innerhalb einer Funktion erstellt und ebenfalls in eine Liste einer wiederum anderen Klasse (C) geschoben.</p>
<p>Nun wird ja jedesmal beim Verlassen einer Funktion der Destruktor einer erstellten Instanz aufgerufen. Beim Aufrufen der zweiten Funktion wird sogar nicht mal mehr ein Konstruktor der (A)-Instanzen aufgerufen, sondern nur noch der Destructor von (A), weil ja die (B) Instanzen ja beim Verlassen der Funktion wieder gelöscht werden.</p>
<p>Der statische Zähler innerhalb von A zählt jedenfalls -450 Instanzen.</p>
<p>Frage: Imo wegen oben logisch, aber (hehe) ist das gut oder schlecht?</p>
<p>Ich finde die arbeit mit Listen angenehmer als dyn. erzeugte Arrays auf dem Heap, da ich später Instanzen von A innerhalb B hin und herschiebe oder gar lösche.</p>
<p>An sich läuft alles wie erwünscht, nur daß der Destruktor eben mehrfach aufgerufen wird bringt mich ein wenig durcheinander!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473918</guid><dc:creator><![CDATA[Josizu]]></dc:creator><pubDate>Thu, 13 Mar 2008 20:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 20:29:56 GMT]]></title><description><![CDATA[<p>normalerweise bist *du* derjenige, der sich darum kümmern muss, dass für jede instanz der destruktor einmal aufgerufen wird.</p>
<p>aber in deinem konkreten fall, vermute ich einfach einmal, dass du vergessen hast, den statischen zähler auch im copy-konstruktor hochzuzählen.</p>
<p>ohne code ist das aber allerhöchstens ein blick in die glaskugel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473925</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 13 Mar 2008 20:29:56 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 20:45:58 GMT]]></title><description><![CDATA[<p>Beitrag wurde von heise kopiert!</p>
<p>Bitte löschen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473934</guid><dc:creator><![CDATA[löschantrag]]></dc:creator><pubDate>Thu, 13 Mar 2008 20:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 20:56:04 GMT]]></title><description><![CDATA[<p>MOMENT !!! Hier wurde weder kopiert oder eingefügt !!! Den Link würde ich gerne mal sehen !!!</p>
<p>Um das gleich mal klarzustellen! Hatte mich schon wegen der Spam-Beschwerde gewundert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473941</guid><dc:creator><![CDATA[Josizu]]></dc:creator><pubDate>Thu, 13 Mar 2008 20:56:04 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 21:04:29 GMT]]></title><description><![CDATA[<p>Eigentlich: Danke für die Lorbeeren <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="😉"
    /> fühle mich geehrt, wenn ich mit Heise-Readkteuren auf eine Stufe gestellt werde.</p>
<p>So, genug.</p>
<blockquote>
<p>aber in deinem konkreten fall, vermute ich einfach einmal, dass du vergessen hast, den statischen zähler auch im copy-konstruktor hochzuzählen.</p>
</blockquote>
<p>Ich benutze gar keinen Kopierkonstruktor.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class c_A{

     /* Do something wonderful pls */
}
</code></pre>
<pre><code class="language-cpp">class c_B{

     void Init();
     list&lt;c_A&gt; m_List;

} 

void c_B::Init(){

    for(int i=0;i&lt;25;i++){
        c_A A;
        m_List.pushback(A);
    }    
    // Lokale Instanz ungültig, der Destruktor wird aufgerufen
}

// Weiter mit class c_C{/**/};
</code></pre>
<p>So in etwa sieht das aus. Klasse C spar ich mir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473948</guid><dc:creator><![CDATA[Josizu]]></dc:creator><pubDate>Thu, 13 Mar 2008 21:04:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 21:13:29 GMT]]></title><description><![CDATA[<p>Josizu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class c_A{

     /* Do something wonderful pls */
}
</code></pre>
</blockquote>
<p>diese klasse hat einen kopierkonstruktor.</p>
<blockquote>
<pre><code class="language-cpp">class c_B{

     void Init();
     list&lt;c_A&gt; m_List;

}
</code></pre>
</blockquote>
<p>ebenso diese.</p>
<blockquote>
<pre><code class="language-cpp">void c_B::Init(){
     
    for(int i=0;i&lt;25;i++){
        c_A A;
        m_List.pushback(A);
    }    
    // Lokale Instanz ungültig, der Destruktor wird aufgerufen
}
</code></pre>
</blockquote>
<p>so ist es richtig:</p>
<pre><code class="language-cpp">void c_B::Init(){

    for(int i=0;i&lt;25;i++){
        c_A A; //instanz erstellen
        m_List.push_back(A); //kopie von A in die liste einfügen
        //destruktor von A wird aufgerufen (kopie bleibt in der liste)
    }
}
</code></pre>
<p>da hat die glaskugel tatsächlich voll ins schwarze getroffen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1473957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473957</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 13 Mar 2008 21:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 21:15:49 GMT]]></title><description><![CDATA[<p>Josizu schrieb:</p>
<blockquote>
<p>Ich benutze gar keinen Kopierkonstruktor.</p>
</blockquote>
<p>Doch, tust du. Die STL-Container arbeiten mit eben diesen.<br />
Was glaubst du passiert den beim pushback?</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473961</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 13 Mar 2008 21:15:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 21:17:18 GMT]]></title><description><![CDATA[<p>Ähm, wo bitte ist der Unterschied?</p>
<p>mit:</p>
<blockquote>
<p>// Lokale Instanz ungültig, der Destruktor wird aufgerufen</p>
</blockquote>
<p>meinte ich, daß außerhalb der Klammern die Instanzen gelöscht werden, also der Destruktor automatisch aufgerufen wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473962</guid><dc:creator><![CDATA[Josizu]]></dc:creator><pubDate>Thu, 13 Mar 2008 21:17:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 21:23:19 GMT]]></title><description><![CDATA[<p><code>c_A A</code> wird nach *jedem* schleifendurchlauf zerstört, nach dem durchlaufen der schleife gibt es keine <code>c_As</code> mehr in der funktion.</p>
<p>push_back kopiert sich die c_As und speichert intern kopien (kopierkonstruktor). und diese kopien werden erst dann gelöscht, wenn das jeweilige <code>c_B</code> objekt zerstört wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473966</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Thu, 13 Mar 2008 21:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::&amp;lt;list&amp;gt; als dyn.Array, Destructor Mehrfachaufruf (?!) on Thu, 13 Mar 2008 21:29:35 GMT]]></title><description><![CDATA[<p>Mach doch einfach mal einen Test:</p>
<p>Schreib dir eine Klasse in der alles was von C++ defaultmäsig angelegt wird eine Ausgabe erzeugt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
class Test
{
    public:
        Test() { std::cout &lt;&lt; &quot;Test::Test()&quot;; }
        Test(const Test&amp;) { std::cout &lt;&lt; &quot;Test::Test(const Test&amp;)&quot;; }
        ~Test() { std::cout &lt;&lt; &quot;Test::~Test()&quot;; }
        Test&amp; operator=(const Test&amp;) { std::cout &lt;&lt; &quot;Test&amp; Test::operator=(const Test&amp;)&quot;; }
};
</code></pre>
<p>Und probiere mit dieser mal ein wenig herum. Dann siehst du ziemlich genau was wir meinen...</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1473971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1473971</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 13 Mar 2008 21:29:35 GMT</pubDate></item></channel></rss>