<?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[Klassen Objekte werden in Arrayinitialisierung zerstört]]></title><description><![CDATA[<p>Hallo</p>
<p>zusammen. Ich habe eine kurze Frage und zwar erzeuge ich ein Array (3D) in dem ich Klassen Objekte abspeichere. Aufbau ist simple und wie folgt:</p>
<pre><code>using lookUpTable = std::vector&lt;std::vector&lt;std::vector&lt;MixtureFraction&gt; &gt; &gt;;
</code></pre>
<p>Der Code sieht wie folgt aus; relativ einfach:</p>
<pre><code>lookUpTable lookUpTables;

    Info&lt;&lt; &quot;Start\n&quot; &lt;&lt; endl;
    {
        const scalarField defects = properties.defects();
        const scalarField sDRs = properties.sDRs();
        const unsigned int Zpoints = properties.mfPoints();

        scalar delta = 1./Zpoints;

        //- Adiabatic flamelet (always available)
        {
            Info&lt;&lt; &quot;    ... for adiabatic condition\n\n&quot;;

            lookUpTables.push_back(vector&lt;vector&lt;MixtureFraction&gt; &gt;());

            forAll(sDRs, rate)
            {
                Info&lt;&lt; &quot;        Create flamelets for scalar dissipation rate &quot;
                    &lt;&lt; sDRs[rate] &lt;&lt; &quot; Hz\n&quot;;

                lookUpTables[0].push_back(vector&lt;MixtureFraction&gt;());

                for(unsigned int i=0; i &lt; Zpoints+1; i++)
                {
                    scalar zPointValue = i*delta;

                    lookUpTables[0][rate].push_back
                    (
                        MixtureFraction
                        (
                            chemistry,
                            thermo,
                            transport,
                            properties,
                            zPointValue,
                            scalar(0)
                        )
                    );

                //- Z points
                }

            //- sDR points
            }
            Info&lt;&lt; &quot;\n&quot;;

        //- adiabatic condition
        }
    }
</code></pre>
<p>Ich erstelle hier meine adiabatisches Array. Im Test habe ich nur eine sRD, sodass mein Array folgende Größe hat:</p>
<p>lookUpTable | 1 | 1 | 40</p>
<p>Am Ende habe ich 40 Objekte des Typs mixutreFraction in dem Vectorarray abgelegt. Darauf kann ich auch zugreifen. Allerdings frage ich mich wieso folgendes beim Aufruf des Programms ausgegeben wird:</p>
<pre><code>... for adiabatic condition

        Create flamelets for scalar dissipation rate 1e-06 Hz
Constructor MixtureFraction

Species: O2
saved: 1
saved outside: 1
saved outside: 1
Species O2: 1
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.95
saved outside: 0.95
saved outside: 0.95
Species O2: 0.95
Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.9
saved outside: 0.9
saved outside: 0.9
Species O2: 0.9
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.85
saved outside: 0.85
saved outside: 0.85
Species O2: 0.85
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.8
saved outside: 0.8
saved outside: 0.8
Species O2: 0.8
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.75
saved outside: 0.75
saved outside: 0.75
Species O2: 0.75
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.7
saved outside: 0.7
saved outside: 0.7
Species O2: 0.7
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.65
saved outside: 0.65
saved outside: 0.65
Species O2: 0.65
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.6
saved outside: 0.6
saved outside: 0.6
Species O2: 0.6
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.55
saved outside: 0.55
saved outside: 0.55
Species O2: 0.55
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.5
saved outside: 0.5
saved outside: 0.5
Species O2: 0.5
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.45
saved outside: 0.45
saved outside: 0.45
Species O2: 0.45
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.4
saved outside: 0.4
saved outside: 0.4
Species O2: 0.4
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.35
saved outside: 0.35
saved outside: 0.35
Species O2: 0.35
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.3
saved outside: 0.3
saved outside: 0.3
Species O2: 0.3
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.25
saved outside: 0.25
saved outside: 0.25
Species O2: 0.25
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.2
saved outside: 0.2
saved outside: 0.2
Species O2: 0.2
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.15
saved outside: 0.15
saved outside: 0.15
Species O2: 0.15
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.1
saved outside: 0.1
saved outside: 0.1
Species O2: 0.1
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.05
saved outside: 0.05
saved outside: 0.05
Species O2: 0.05
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0
saved outside: 0
saved outside: 0
Species O2: 0
Destruct MixtureFraction
</code></pre>
<p>Ich war der Meinung, dass der Destruktor erst aufgerufen wird, nachdem die Gültigkeit von <em>lookUpTable</em> erloschen ist. Kann mir jemand erklären wieso ich so oft der Destruktor so oft aufgerufen wird? Komm da gerade nicht drauf. Vllt mach ich auch einen Fehler beim Aufbau des Arrays <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=":/"
      alt="😕"
    /></p>
<p>Grüße Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/335852/klassen-objekte-werden-in-arrayinitialisierung-zerstört</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 03:50:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/335852.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Dec 2015 21:08:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen Objekte werden in Arrayinitialisierung zerstört on Tue, 15 Dec 2015 21:08:50 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>zusammen. Ich habe eine kurze Frage und zwar erzeuge ich ein Array (3D) in dem ich Klassen Objekte abspeichere. Aufbau ist simple und wie folgt:</p>
<pre><code>using lookUpTable = std::vector&lt;std::vector&lt;std::vector&lt;MixtureFraction&gt; &gt; &gt;;
</code></pre>
<p>Der Code sieht wie folgt aus; relativ einfach:</p>
<pre><code>lookUpTable lookUpTables;

    Info&lt;&lt; &quot;Start\n&quot; &lt;&lt; endl;
    {
        const scalarField defects = properties.defects();
        const scalarField sDRs = properties.sDRs();
        const unsigned int Zpoints = properties.mfPoints();

        scalar delta = 1./Zpoints;

        //- Adiabatic flamelet (always available)
        {
            Info&lt;&lt; &quot;    ... for adiabatic condition\n\n&quot;;

            lookUpTables.push_back(vector&lt;vector&lt;MixtureFraction&gt; &gt;());

            forAll(sDRs, rate)
            {
                Info&lt;&lt; &quot;        Create flamelets for scalar dissipation rate &quot;
                    &lt;&lt; sDRs[rate] &lt;&lt; &quot; Hz\n&quot;;

                lookUpTables[0].push_back(vector&lt;MixtureFraction&gt;());

                for(unsigned int i=0; i &lt; Zpoints+1; i++)
                {
                    scalar zPointValue = i*delta;

                    lookUpTables[0][rate].push_back
                    (
                        MixtureFraction
                        (
                            chemistry,
                            thermo,
                            transport,
                            properties,
                            zPointValue,
                            scalar(0)
                        )
                    );

                //- Z points
                }

            //- sDR points
            }
            Info&lt;&lt; &quot;\n&quot;;

        //- adiabatic condition
        }
    }
</code></pre>
<p>Ich erstelle hier meine adiabatisches Array. Im Test habe ich nur eine sRD, sodass mein Array folgende Größe hat:</p>
<p>lookUpTable | 1 | 1 | 40</p>
<p>Am Ende habe ich 40 Objekte des Typs mixutreFraction in dem Vectorarray abgelegt. Darauf kann ich auch zugreifen. Allerdings frage ich mich wieso folgendes beim Aufruf des Programms ausgegeben wird:</p>
<pre><code>... for adiabatic condition

        Create flamelets for scalar dissipation rate 1e-06 Hz
Constructor MixtureFraction

Species: O2
saved: 1
saved outside: 1
saved outside: 1
Species O2: 1
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.95
saved outside: 0.95
saved outside: 0.95
Species O2: 0.95
Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.9
saved outside: 0.9
saved outside: 0.9
Species O2: 0.9
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.85
saved outside: 0.85
saved outside: 0.85
Species O2: 0.85
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.8
saved outside: 0.8
saved outside: 0.8
Species O2: 0.8
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.75
saved outside: 0.75
saved outside: 0.75
Species O2: 0.75
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.7
saved outside: 0.7
saved outside: 0.7
Species O2: 0.7
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.65
saved outside: 0.65
saved outside: 0.65
Species O2: 0.65
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.6
saved outside: 0.6
saved outside: 0.6
Species O2: 0.6
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.55
saved outside: 0.55
saved outside: 0.55
Species O2: 0.55
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.5
saved outside: 0.5
saved outside: 0.5
Species O2: 0.5
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.45
saved outside: 0.45
saved outside: 0.45
Species O2: 0.45
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.4
saved outside: 0.4
saved outside: 0.4
Species O2: 0.4
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.35
saved outside: 0.35
saved outside: 0.35
Species O2: 0.35
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.3
saved outside: 0.3
saved outside: 0.3
Species O2: 0.3
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.25
saved outside: 0.25
saved outside: 0.25
Species O2: 0.25
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.2
saved outside: 0.2
saved outside: 0.2
Species O2: 0.2
Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.15
saved outside: 0.15
saved outside: 0.15
Species O2: 0.15
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.1
saved outside: 0.1
saved outside: 0.1
Species O2: 0.1
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0.05
saved outside: 0.05
saved outside: 0.05
Species O2: 0.05
Destruct MixtureFraction

Constructor MixtureFraction

Species: O2
saved: 0
saved outside: 0
saved outside: 0
Species O2: 0
Destruct MixtureFraction
</code></pre>
<p>Ich war der Meinung, dass der Destruktor erst aufgerufen wird, nachdem die Gültigkeit von <em>lookUpTable</em> erloschen ist. Kann mir jemand erklären wieso ich so oft der Destruktor so oft aufgerufen wird? Komm da gerade nicht drauf. Vllt mach ich auch einen Fehler beim Aufbau des Arrays <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=":/"
      alt="😕"
    /></p>
<p>Grüße Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479682</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Tue, 15 Dec 2015 21:08:50 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen Objekte werden in Arrayinitialisierung zerstört on Tue, 15 Dec 2015 22:08:56 GMT]]></title><description><![CDATA[<p>Das dürfte durch das mehrmalige Vergrößern des Vektors kommen. Wenn du ständig <code>push_back</code> benutzt ist irgendwann der vom <code>std::vector</code> reservierte Speicher voll, er muss neuen reservieren, die Daten rüber kopieren und die alten Daten löschen. Du kannst ja vor der Schleife mit <a href="http://en.cppreference.com/w/cpp/container/vector/reserve" rel="nofollow">reserve</a> entsprechend viel Platz reservieren. Dann sollten die Ausgaben vom Destructor verschwunden sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479691</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 15 Dec 2015 22:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen Objekte werden in Arrayinitialisierung zerstört on Wed, 16 Dec 2015 11:42:05 GMT]]></title><description><![CDATA[<p>Hi Sebi,</p>
<p>vielen Dank für die Rückmeldung. So hab ich das noch gar nicht gesehen (:<br />
Heißt also in der ersten Schleife, erstelle ich ein neues Objekt im Vector <em>lookUpTables</em>. Dann hat der Vector eine bestimme Größe, beim erneuten push.back() vergrößere ich den Vektor wieder. Der alte reservierte Speicher für <em>lookUpTables</em> ist jetzt zu klein, somit wird neuer angefordert und dann die Prozedur die du erwähnt hast durchgeführt (kopieren und dann wieder zerstören).</p>
<p>Ich werde heute mal mit reserve arbeiten (danke für den Hinweis). Soweit ich es aber von deiner Nachricht rauslese, ist das was ich erhalte nicht weiter problematisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479737</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Wed, 16 Dec 2015 11:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen Objekte werden in Arrayinitialisierung zerstört on Wed, 16 Dec 2015 11:45:58 GMT]]></title><description><![CDATA[<p>Zusätzlich werden bei jedem push_back ein Objekt in den vector kopiert und das Ursprungsobjekt gelöscht. Wenn Du im Copy-Ctor auch noch eine Ausgabe machtest, würdest Du das Erzeugen der Kopie auch noch sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479738</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 16 Dec 2015 11:45:58 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen Objekte werden in Arrayinitialisierung zerstört on Wed, 16 Dec 2015 11:58:59 GMT]]></title><description><![CDATA[<p>Shor-ty schrieb:</p>
<blockquote>
<p>Soweit ich es aber von deiner Nachricht rauslese, ist das was ich erhalte nicht weiter problematisch.</p>
</blockquote>
<p>Nein das ist völlig normal. Der vector kann ja schließlich nicht hellsehen und wissen wie häufig du <code>push_back</code> nutzen möchtest. Jedes mal wenn der vector zu klein ist wird dieser auf das 1,5-2,0 fache seiner momentanen Größe vergrößert. Das sieht man auch in der Ausgabe da Anfangs nach fast jedem <code>push_back</code> Objekte zerstört werden, später aber immer seltener.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479739</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Wed, 16 Dec 2015 11:58:59 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen Objekte werden in Arrayinitialisierung zerstört on Wed, 16 Dec 2015 12:19:28 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>das mit dem CConst schau ich mir heute Abend mal noch an. Danke Sebi für die Klärung. Wusste gar nicht das std::vector ca. 1.5 - 2 fache reserviert. Meine Ausgabe ähnelt ja sehr stark der, die in dem Beispiel auf der reserve Seite zu finden ist.</p>
<p>Wiedermal was dazugelernt. Danke euch.<br />
Grüße Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2479743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2479743</guid><dc:creator><![CDATA[Shor-ty]]></dc:creator><pubDate>Wed, 16 Dec 2015 12:19:28 GMT</pubDate></item></channel></rss>