<?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[Verständnisfrage statisches Feld + Destruktor]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Klasse welche ein statisches char-Feld enthält, in welches ich Objekte abspeicher, welche vom Typ dieser Klasse sind. Dies geht auch ganz gut. Nun bin ich an einer Stelle, in der ich einzelne Objekte aus diesem Feld nicht mehr brauche. Ich will es nicht komplett löschen. Muß ich die Objekte expliziet löschen bzw. wenn ich gar keine mehr brauche, wie bekomme ich dieses Feld gelöscht? Einfach bei der nächsten Nutzung überschreiben, oder kann ich da schon expliziet aufräumen???</p>
<p>Bin gerade etwas verwirrt, wie man vielleicht merkt <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>Frohe Ostern<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238517/verständnisfrage-statisches-feld-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 00:22:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238517.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Apr 2009 16:40:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage statisches Feld + Destruktor on Sat, 11 Apr 2009 16:40:50 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Klasse welche ein statisches char-Feld enthält, in welches ich Objekte abspeicher, welche vom Typ dieser Klasse sind. Dies geht auch ganz gut. Nun bin ich an einer Stelle, in der ich einzelne Objekte aus diesem Feld nicht mehr brauche. Ich will es nicht komplett löschen. Muß ich die Objekte expliziet löschen bzw. wenn ich gar keine mehr brauche, wie bekomme ich dieses Feld gelöscht? Einfach bei der nächsten Nutzung überschreiben, oder kann ich da schon expliziet aufräumen???</p>
<p>Bin gerade etwas verwirrt, wie man vielleicht merkt <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>Frohe Ostern<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694530</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Sat, 11 Apr 2009 16:40:50 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage statisches Feld + Destruktor on Sat, 11 Apr 2009 16:55:36 GMT]]></title><description><![CDATA[<p>uwerothfeld schrieb:</p>
<blockquote>
<p>ich habe eine Klasse welche ein statisches char-Feld enthält, in welches ich Objekte abspeicher, welche vom Typ dieser Klasse sind.</p>
</blockquote>
<p>iih, das hört sich eklig an. kannst du ein bisschen code zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694542</guid><dc:creator><![CDATA[wunderbär]]></dc:creator><pubDate>Sat, 11 Apr 2009 16:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage statisches Feld + Destruktor on Sat, 11 Apr 2009 17:32:39 GMT]]></title><description><![CDATA[<p>bitte WAS ?</p>
<p>ich vermute du konstruierst die klasse in dem array</p>
<p>dann musst du auch den destruktor aufrufen:</p>
<pre><code class="language-cpp">class a
{
public:
    a():i(1){}
    ~a(){i=0;}
    int geti(){return i;}
};
char buffer[64];
a *ptr = (a *)buffer;
a-&gt;a::a();
a-&gt;~a();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1694553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694553</guid><dc:creator><![CDATA[hööö]]></dc:creator><pubDate>Sat, 11 Apr 2009 17:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage statisches Feld + Destruktor on Sat, 11 Apr 2009 18:08:16 GMT]]></title><description><![CDATA[<p>Scheint mir auch eine eklige Vorgehensweise. Hat es einen Grund, wieso du das so machst? Da ist ja fast noch <code>void*</code> schöner.</p>
<p>Sofern es sich nicht um PODs handelt und man den Konstruktor aufruft, sollte man den Destruktor auch aufrufen. Ich würde aber eher Placement New und <code>reinterpret_cast</code> einsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694560</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 11 Apr 2009 18:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage statisches Feld + Destruktor on Sun, 12 Apr 2009 19:16:17 GMT]]></title><description><![CDATA[<p>Forhe Ostern,</p>
<p>also sorry das ich mich jetzt erst melde, die Familie ... ;).</p>
<p>Also ich habe ne Klasse ASTExpression, welche die verwendeten ASTExpressions in einer Liste speichern soll. Dies mach ich, da es bei meinem System kein malloc o.ä. gibt. Hier also die ASTExpression.h:</p>
<pre><code class="language-cpp">//define a list to store all expressions
static char expressionList[(sizeof(ExpressionType)+2*sizeof(ASTTerm*)+sizeof(ASTExpression*))*DSM_EXPRESSION_CNT_MAX];

static size_t expressionListIndex;
</code></pre>
<p>Es sollen DSM_EXPRESSION_CNT_MAX Elemente gespeichert werden, wobei die Größe eines Elementes aus der obigen Anweisung denk ich zu entnehmen ist.</p>
<p>In der ASTExpression.cpp habe ich dann folgendes:</p>
<pre><code class="language-cpp">size_t ASTExpression::expressionListIndex = 0;

char ASTExpression::expressionList[(sizeof (ExpressionType) + 2 * sizeof (ASTTerm*) + sizeof (ASTExpression*)) * DSM_EXPRESSION_CNT_MAX];

static void* ASTExpression::operator new (size_t size) {

        if (ASTExpression::expressionListIndex + size &gt;
            (DSM_EXPRESSION_CNT_MAX * sizeof (ASTExpression))) {
            throw std::bad_alloc();
        }//End if
        else {
            ASTExpression::expressionListIndex += size;
            return ASTExpression::expressionList + ASTExpression::expressionListIndex - size;

        }//End else
    }//End operator new
</code></pre>
<p>Verwenden tue ich es mittels:</p>
<pre><code class="language-cpp">ASTExpression* e = new ASTExpression();
</code></pre>
<p>Kurz es sollte einigen hier bekannt vorkommen. Wenn ich dies mit Placement new richtig verstanden habe, dann ist dies hier eine solche Konstruktion. Zumindest zeigt mir der Debugger an das sich das Array langsam füllt. Gehe ich hier recht in der Annahme?</p>
<p>Nun habe ich einen Fall, da will ich aus dem Baum von ASTExpressions Elemente löschen. Dies ist unteranderem hier der Fall (Methodenausschnitt):</p>
<pre><code class="language-cpp">//current ASTExpression is ex
        ASTExpression* child = ex-&gt;getLeft();
        ex-&gt;setType(child-&gt;getType());

        if (child-&gt;getType() != DSM_EXPRESSION_TERM &amp;&amp;
            child-&gt;getType() != DSM_EXPRESSION_UNDEFINED) {

            ex-&gt;setLeft(child-&gt;getLeft());

            if (child-&gt;getType() == DSM_EXPRESSION_AND ||
                child-&gt;getType() == DSM_EXPRESSION_OR) {

                ex-&gt;setRight(child-&gt;getRight());
            }//End if
        }//End if
</code></pre>
<p>Nun bin ich gerade verwirrt, ob ich den ehemaligen, aktuellen Ausdruck per Destrukter zerstören muß, oder ob ich warten kann, bis ich eh alle (Zeitpunkt kommt nach einer Reihe von Transformationen) wegwerfe. Oder ist dies eh alles egal, da die Liste statisch ist, ich also eigentlich nur den Index zurücksetzen muß (dazu tendiere ich im Moment).</p>
<p>Frohe Ostern<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1694971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1694971</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Sun, 12 Apr 2009 19:16:17 GMT</pubDate></item></channel></rss>