<?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[delete von klassenvariablen]]></title><description><![CDATA[<p>Hallo,</p>
<p>bisher habe ich ein delete so gemacht:</p>
<pre><code class="language-cpp">//Aufruf zum delete

Hash_Table&lt;T&gt;* ht = NULL;
//Mache was mit ht - fülle es z.B

ht-&gt;Delete_Hash_Table(ht);

//jetzt die delete methode
template&lt;class T&gt;	void
Hash_Table&lt;T&gt;::Delete_Hash_Table(Hash_Table&lt;T&gt; *ht)
{
	if (ht) 
	{
		for (int i = 0; i &lt; ht-&gt;size; i++) 
		{
			if (ht-&gt;col_idcs_table[i]) 
				delete [] ht-&gt;col_idcs_table[i];
			if (ht-&gt;row_idcs_table[i]) 
				delete [] ht-&gt;row_idcs_table[i];
			if (ht-&gt;vals_table[i]) 
				delete [] ht-&gt;vals_table[i];
		}
		delete [] ht-&gt;col_idcs_table;
		delete [] ht-&gt;row_idcs_table;
		delete [] ht-&gt;vals_table;
		delete ht;
	}
}
</code></pre>
<p>Ich meine aber, dass es da es member sind auch so geht:</p>
<pre><code class="language-cpp">Hash_Table&lt;T&gt;* ht = NULL;
//Mache was mit ht - fülle es z.B

ht-&gt;Delete_Hash_Table();

template&lt;class T&gt;	void
Hash_Table&lt;T&gt;::Delete_Hash_Table()
{
	if (this) 
	{
		for (int i = 0; i &lt; size; i++) 
		{
			if (col_idcs_table[i]) 
				delete [] col_idcs_table[i];
			if (row_idcs_table[i]) 
				delete [] row_idcs_table[i];
			if (vals_table[i]) 
				delete [] vals_table[i];
		}
		delete [] col_idcs_table;
		delete [] row_idcs_table;
		delete [] vals_table;
		delete this;
	}
}
</code></pre>
<p>Mir geht es jetzt darum: Ist das if(this) hier korrekt? Also wäre das auch ein pointer?<br />
Ist denn über den Aufruf ht-&gt;Delete_Hash_Table(); klar, dass die member von diesem ht und nicht z.B eines anderen ht2 gelöscht werden?<br />
wäre das so in Ordnung?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193666/delete-von-klassenvariablen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 05:41:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193666.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Sep 2007 12:50:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 12:50:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>bisher habe ich ein delete so gemacht:</p>
<pre><code class="language-cpp">//Aufruf zum delete

Hash_Table&lt;T&gt;* ht = NULL;
//Mache was mit ht - fülle es z.B

ht-&gt;Delete_Hash_Table(ht);

//jetzt die delete methode
template&lt;class T&gt;	void
Hash_Table&lt;T&gt;::Delete_Hash_Table(Hash_Table&lt;T&gt; *ht)
{
	if (ht) 
	{
		for (int i = 0; i &lt; ht-&gt;size; i++) 
		{
			if (ht-&gt;col_idcs_table[i]) 
				delete [] ht-&gt;col_idcs_table[i];
			if (ht-&gt;row_idcs_table[i]) 
				delete [] ht-&gt;row_idcs_table[i];
			if (ht-&gt;vals_table[i]) 
				delete [] ht-&gt;vals_table[i];
		}
		delete [] ht-&gt;col_idcs_table;
		delete [] ht-&gt;row_idcs_table;
		delete [] ht-&gt;vals_table;
		delete ht;
	}
}
</code></pre>
<p>Ich meine aber, dass es da es member sind auch so geht:</p>
<pre><code class="language-cpp">Hash_Table&lt;T&gt;* ht = NULL;
//Mache was mit ht - fülle es z.B

ht-&gt;Delete_Hash_Table();

template&lt;class T&gt;	void
Hash_Table&lt;T&gt;::Delete_Hash_Table()
{
	if (this) 
	{
		for (int i = 0; i &lt; size; i++) 
		{
			if (col_idcs_table[i]) 
				delete [] col_idcs_table[i];
			if (row_idcs_table[i]) 
				delete [] row_idcs_table[i];
			if (vals_table[i]) 
				delete [] vals_table[i];
		}
		delete [] col_idcs_table;
		delete [] row_idcs_table;
		delete [] vals_table;
		delete this;
	}
}
</code></pre>
<p>Mir geht es jetzt darum: Ist das if(this) hier korrekt? Also wäre das auch ein pointer?<br />
Ist denn über den Aufruf ht-&gt;Delete_Hash_Table(); klar, dass die member von diesem ht und nicht z.B eines anderen ht2 gelöscht werden?<br />
wäre das so in Ordnung?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374390</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 12:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 14:03:56 GMT]]></title><description><![CDATA[<p>gast_xy schrieb:</p>
<blockquote>
<p>Mir geht es jetzt darum: Ist das if(this) hier korrekt? Also wäre das auch ein pointer?</p>
</blockquote>
<p>Ich würde eher ein assert nehmen, wenn überhaupt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Und ja, der this-Zeiger kann auch NULL sein, etwa hier:</p>
<pre><code class="language-cpp">Hash_Table&lt;T&gt;* ht = NULL;
ht-&gt;Delete_Hash_Table();
</code></pre>
<p>gast_xy schrieb:</p>
<blockquote>
<p>Ist denn über den Aufruf ht-&gt;Delete_Hash_Table(); klar, dass die member von diesem ht und nicht z.B eines anderen ht2 gelöscht werden?<br />
wäre das so in Ordnung?</p>
</blockquote>
<p>Ich denke du solltest es eher über einen Destruktor machen, die gibts ja nicht umsonst. Wird z.B. das Hash-Table-Objekt auf dem Stack angelegt <code>Hash_Table&lt;T&gt; ht;</code> , dann schlägt <code>delete this;</code> natürlich fehl! Von daher: Die ganzen delete-Sachen in den Destruktor packen, dann muss aber ein mit new erzeugtes Hash-Table auch mit delete wieder zerstört werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374421</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 28 Sep 2007 14:03:56 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 14:18:20 GMT]]></title><description><![CDATA[<p>hmmm...ok.<br />
Das heißt aber doch ihc muss dann den destruktor auch aufrufen nicht wahr?</p>
<pre><code class="language-cpp">ht-&gt;~Delete_Hash_Table();
</code></pre>
<p>Prinzipiell ging es mir hauptsächlich darum, ob so auch korrekt auf die Membervariablen zugegriffen wird. Also ich wollte wissen ob ich denn das *ht überhaupt übergeben sollte oder ob das sowieso aus dem aufruf ht-&gt;fct() klar hervorgeht.<br />
Mit anderen worten:</p>
<pre><code class="language-cpp">Hash_Table&lt;T&gt;* ht1, *ht2;

ht1-&gt;fct(); //verändert doch nur die member von OBjekt ht1 oder?
ht2-&gt;fct(); //verändert doch nicht die member von ht1, sondern seine eigenen oder?
</code></pre>
<p>also der pointer-aufruf ist eindeutig oder?</p>
<p>Weitere frage:</p>
<p>folgendes:</p>
<pre><code class="language-cpp">Hash_Table&lt;T&gt; ht = Hash_Table&lt;T&gt;();

ht.~Delete_Hash_Table();

// wird hier trotzdem in den if-zweig des delete geprungen? Ja oder, ein statisches Objekt ist ungleich NULL oder?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374429</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 14:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 14:34:32 GMT]]></title><description><![CDATA[<p>Ich glaube du machst dir da zuviele Gedanken <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="😉"
    /><br />
Wenn du zwei Instanzen von Hash_Table hast, hat natürlich jedes davon seine eigenen Variablen und deren Funktionen greifen dann natürlich auch nur auf die Variablen des jeweiligen Objektes zu.</p>
<p>Und wegen Kon- und Destruktor-Aufrufen: Das geht auch alles von alleine. Du hast zwei Möglichkeiten, du kannst Objekte auf dem Stack oder auf dem Heap ablegen.<br />
Stack:</p>
<pre><code class="language-cpp">void SomeFunction()
{
    Hash_Table&lt;int&gt; ht(); // Hier wird der Konstruktor aufgerufen, () kannst du auch weglassen
    ht.BlaBla();
    // Hier ist der &quot;Scope&quot; vorbei, das Objekt ht wird zerstört, der Destruktor wird automatisch aufgerufen
}
</code></pre>
<p>Heap:</p>
<pre><code class="language-cpp">void SomeFunction()
{
    Hash_Table&lt;int&gt;* ht = new Hash_Table&lt;int&gt;(); // Hier wird Speicher angefordert und der Konstruktor aufgerufen
    // ht ist hier nur ein Zeiger auf das Objekt, nicht das Objekt selber
    // Das bedeutet, am Ende vom Block/Scope wird nicht automatisch der Destruktor aufgerufen, also:
    delete ht; // Destruktor wird aufgerufen und der Speicher wieder freigegeben
}
</code></pre>
<p>Der Vorteil, Variablen auf dem Heap freizugeben, ist, dass sie eben nicht beim Verlassen des Blocks kaputtgemacht werden. D.h. du kannst den Zeiger rumreichen und das Objekt dahinter erstellen und zerstören wann du willst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Achso, und deine Klasse könnte dann so aussehen:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class Hash_Table
{
    public:
        Hash_Table() // Konstruktor
        {
            // Hier kannst du alle deine Member-Variablen erstellen, z.B.
            col_idcs_table = new T[100];
        }

        ~Hash_Table()
        {
            for (int i = 0; i &lt; size; i++)
            {
                if (col_idcs_table[i])
                    delete [] col_idcs_table[i];
                if (row_idcs_table[i])
                    delete [] row_idcs_table[i];
                if (vals_table[i])
                    delete [] vals_table[i];
            }
            delete [] col_idcs_table;
            delete [] row_idcs_table;
            delete [] vals_table;
            //delete this; das brauchst du jetzt nicht mehr :)
        }

    private:
        T* col_idcs_table;
        T* row_idcs_table;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374437</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 28 Sep 2007 14:34:32 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 14:58:21 GMT]]></title><description><![CDATA[<p>Vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Hat mir sehr geholfen!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374449</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 14:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 15:02:38 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Ich würde eher ein assert nehmen, wenn überhaupt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Und ja, der this-Zeiger kann auch NULL sein, etwa hier:</p>
<pre><code class="language-cpp">Hash_Table&lt;T&gt;* ht = NULL;
ht-&gt;Delete_Hash_Table();
</code></pre>
</blockquote>
<p>Der Aufruf erzeugt schon undefiniertes Verhalten. Du landest zwar in der Praxis bei nicht-virtuellen Funktionen tatsächlich in der Methode mit this==0, aber toller Stil ist das nicht gerade. Das assert gehört VOR den Aufruf der Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374452</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 28 Sep 2007 15:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 15:04:53 GMT]]></title><description><![CDATA[<p>Kann ihc denn an einen destruktor auch parameter übergeben:<br />
~Destructor(int num); ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374453</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 15:04:53 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 15:25:24 GMT]]></title><description><![CDATA[<p>gast_xy schrieb:</p>
<blockquote>
<p>Kann ihc denn an einen destruktor auch parameter übergeben:<br />
~Destructor(int num); ?</p>
</blockquote>
<p>ne</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374464</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 28 Sep 2007 15:25:24 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 16:37:04 GMT]]></title><description><![CDATA[<p>Warum geht denn das folgende nicht ohne speicherleck:</p>
<pre><code class="language-cpp">Index_Set *a = NULL;

delete a;

Index_Set::Index_Set(int len_a)
{
	idcs = NULL;
	len = len_a;
	idcs = new int[len];
}

Index_Set::~Index_Set()

{
        if(idcs)
	    delete [] idcs;
}

// idcs sind als member : int * idcs;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374516</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 16:44:39 GMT]]></title><description><![CDATA[<p>Ehm</p>
<pre><code class="language-cpp">Index_Set *a = NULL;
delete a;
</code></pre>
<p>Löschen eines Null-Zeigers. Kein Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Darfst a nur nicht dazwischen nutzen!</p>
<pre><code class="language-cpp">Index_Set::Index_Set(std::size_t len) : m_len(len)
{
    m_idcs = new int[len];
}
</code></pre>
<p>geht auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> len muss aber positive Ganzzahl sein. D.h. std::size_t ...</p>
<pre><code class="language-cpp">Index_Set::~Index_Set()
{
    delete [] m_idcs;
}
</code></pre>
<p>NULL-Zeiger führen nicht zu undefiniertem Verhalten. Das ist auch i.O. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
=&gt;Sollte d.h. so gehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374522</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 16:45:27 GMT]]></title><description><![CDATA[<p>gast_xy schrieb:</p>
<blockquote>
<p>Warum geht denn das folgende nicht ohne speicherleck:</p>
</blockquote>
<p>In dem Codestück passiert garnichts... Wo siehst Du ein Speicherleck?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374523</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 16:46:55 GMT]]></title><description><![CDATA[<p>Kann es sein, dass das am pointer liegt?<br />
so lösche ich doch nur den pointer, nicht aber die member oder? Natürlich sind die Member gefüllt vorher. Wie lösche ich denn die member von Index_Set ohne lecks wenn ich sowas habe?</p>
<pre><code class="language-cpp">Index_Set* a = NULL;

Index_Set* b = NULL;

b = new Index_Set(5);
b-&gt;idcs[0] = 0;
//fülle b weiter

a = b;

//hier verursacht ein delete a Probleme? Evtl. weil nur der Pointer gelöscht wird?
delete a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374524</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:46:55 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 16:59:11 GMT]]></title><description><![CDATA[<p>Du löscht niemals Pointer. Du löscht immer ein Objekt, dessen Adresse in einem Pointer gespeichert ist. Wenn das Objekt gelöscht wird, werden natürlich der Destruktor und die Destruktoren aller Mitglieder des Objekts auch aufgerufen.</p>
<p>Wenn Du Zeiger im Objekt hast (wie idcs), musst Du diese selbst verwalten, sprich löschen wie in Deinem vorletzten Beispiel mit delete im Destruktor. Damit sollte Dein Code keinerlei Probleme machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374543</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 28 Sep 2007 16:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 17:19:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Index_Set* a = NULL; // a zeigt nirgendwo hin (0)
Index_Set* b = new Index_Set(5); // b zeigt auf ein Index_Set-Objekt auf dem Heap
a = b; // a zeigt auf das Index_Set-Objekt auf das auch b zeigt.
delete a; // Das Index_Set-Objekt auf das a und b zeigen wird gelöscht. ({ ~dtor })
// !!! ACHTUNG !!!
// b zeigt auf den nicht mehr existierenden Bereich aufm Heap ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374554</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 28 Sep 2007 17:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 17:24:49 GMT]]></title><description><![CDATA[<p>Also langsam verzweifle ich:</p>
<p>bevor ich etwas ändere, habe ich wirklich ein speicherleckfreies programm.</p>
<p>Sobals ich NUR diesen destruktor reinbaue OHNE dass er aufgerufen wird. Es wird immer noch Index_Set::Delete_Index_Set(Index_Set* is) aufgerufen!!!<br />
Aber so bekomme ich 8000 errors:</p>
<pre><code class="language-cpp">Index_Set::~Index_Set()

{
        if (idcs)
	     delete [] idcs;
}
</code></pre>
<p>Ich initialisiere meine Index_Set pointer nur so:</p>
<pre><code class="language-cpp">Index_Set * a = NULL;
a = new Index_Set(...);

//Mein Konstruktor:
Index_Set::Index_Set(int len_a)
{
	idcs = NULL;
	len = len_a;
	idcs = new int[len];
}
</code></pre>
<p>das kann doch nicht sein <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/1374558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374558</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 17:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 17:33:24 GMT]]></title><description><![CDATA[<p>er schreit mit:</p>
<pre><code>Conditional jump or move depends on uninitialised value(s)
==9597==    at 0x8052FAA: Index_Set::~Index_Set() ....in..
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374563</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 17:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:16:27 GMT]]></title><description><![CDATA[<p>ok es liegt an folgender sache:</p>
<pre><code class="language-cpp">Index_Set** j_sets;

//j_sets wird initialisiert

Index_Set *a = NULL;
a = new Index_Set(3);
j_sets[0] = a;

Index_Set *b = NULL;
b = j_sets[0];

//das folgende delete geht nicht mehr ohne probleme - WARUM?
delete b;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374585</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:23:00 GMT]]></title><description><![CDATA[<p>Ehm sollte vorher schon raushauen ^^</p>
<pre><code class="language-cpp">Index_Set** ptr_array_set = new Index_Set*[1]; // !!! Muss schon auf was zeigen ;) !!!

Index_Set* ptr_a = new Index_Set(3);
ptr_array_set[0] = ptr_a;

Index_Set* ptr_b = ptr_array_set[0];
delete ptr_b;
ptr_b = NULL; // s.u.
ptr_a = NULL; // damit man nicht mehr in Versuchung kommt ptr_a zu nutzen :P
delete [] ptr_array_set; // muss auch wieder freigegeben werden!
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374589</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:39:53 GMT]]></title><description><![CDATA[<p>Ich bin schon ganz balabala...</p>
<p>warum geht dann folgendes nicht und wie kann ich es lösen?:</p>
<pre><code class="language-cpp">Index_Set * a = NULL;

for ( int i = 0; i &lt; 5; i++)
{
   //Get_Index_Set funktioniert !!!!
   a = Get_Index_Set(...);

   //mache was mit a

   if (//some_condition)
        break;

   delete a;
}
//hier muss das delete weg - aber wenn die break anweisung kommt 
//kann ich nicht einfach hier das delete hinmachen anstatt vor die break-anweisung?
delete a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1374592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374592</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:39:53 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:47:47 GMT]]></title><description><![CDATA[<p>Der Teil ist korrekt ... Get_Index_Set aber nicht</p>
<pre><code class="language-cpp">Index_Set * a = NULL;
for (std::size_t i = 0; i &lt; 5; ++i)
{
   a = get_index_set(...);
   if ( ... )
        break;

   delete a;
}

delete a; // delete NULL ist definiert.
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374596</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:47:47 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:52:14 GMT]]></title><description><![CDATA[<p>so gehts - aber WARUM denn?</p>
<pre><code class="language-cpp">Index_Set * a = NULL;

for ( int i = 0; i &lt; 5; i++)
{
   //Get_Index_Set funktioniert !!!!
   a = Get_Index_Set(...);

   //mache was mit a

   if (//some_condition)
   {
        delete a;
        break;
    }

   delete a;
}
</code></pre>
<p>get_index_set sieht so aus:</p>
<p>Index_Set* Class:Get_Index_Set(int i)<br />
{<br />
Index_Set * is = NULL;</p>
<p>//is wird geholt // so ungefähr aber korrekt:<br />
is = j_sets[i];</p>
<p>return is;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374600</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:52:14 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:59:51 GMT]]></title><description><![CDATA[<p>Es lag doch an was ganz anderem . Ich habe auch Objekte so initialisiert:</p>
<p>Index_Set o_is;</p>
<p>nach dem fkt-scope wird da ja auch der destruktor aufgerufen der ja idcs löscht.<br />
Da aber o_is den standard-konstruktor aufruft der leer ist bei mir, wird auch kein idcs initialisiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Oh man....sein ein mist....</p>
<p>danke für die geduld und Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374610</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 18:59:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Index_Set* Class::Get_Index_Set(std::size_t i) const
{
    return j_sets[i];
}
</code></pre>
<p>...</p>
<pre><code class="language-cpp">Index_Set* ptr = NULL;
for (std::size_t i = 0; i &lt; 5; ++i)
{
    ptr = get_index_set(...);

    if (/* ... */)
        break;

    delete ptr;
    ptr = NULL;
}
delete ptr;
</code></pre>
<p>sollte gehen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374611</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 28 Sep 2007 18:59:58 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Fri, 28 Sep 2007 19:33:02 GMT]]></title><description><![CDATA[<p>Ehm...da frage ich mich gerade wie mann denn dann für statische Objekte einen Konstruktor-Aufruf vermeiden kann aber damit auch nicht die Member im destruktor nach dem function-scope nicht gelöscht werden - gäbe ja einen seg-fault.?</p>
<p>Also wenn ich folgendes habe:</p>
<pre><code class="language-cpp">class A
{
      public:
            A() {  };
            A(int num);

           ~A();

            int * a;
};

// implementierung
A::A(int num)
{
       a = new int[num];
}

A::~A()
{
     delete [] a;
}
</code></pre>
<p>Wie sollte denn sowas dann gehen?</p>
<pre><code class="language-cpp">//irgendwo:
void B::fct()
{
    A o_a;
     //nach dem verlassen gibts doch hier nen seg-fault
     //aber wie sollte ich dann statsiche objekte initialisieren?

    // So müsste ich ja immer das hier schreiben:
    int dummy = 0;
    A o_a = A::A(dummy);    

}
</code></pre>
<p>Oder verstehe ich da irgendwas nicht so ganz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374626</guid><dc:creator><![CDATA[gast_xy]]></dc:creator><pubDate>Fri, 28 Sep 2007 19:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Sat, 29 Sep 2007 02:38:17 GMT]]></title><description><![CDATA[<p>Was meinst du mit statischen Objekten? Und was versprichst du dir von <code>A o_a = A::A(dummy);</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374707</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 29 Sep 2007 02:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to delete von klassenvariablen on Sat, 29 Sep 2007 10:26:28 GMT]]></title><description><![CDATA[<p>gast_xy schrieb:</p>
<blockquote>
<p>Oder verstehe ich da irgendwas nicht so ganz?</p>
</blockquote>
<p>Scheinbar. Fang besser nochmal ganz vorne bei Lebensdauer und Scopes an. Denn Deine Fragen sind konfus und ergeben sehr wenig Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374758</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Sat, 29 Sep 2007 10:26:28 GMT</pubDate></item></channel></rss>