<?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[Destruktor aufruf[Gelöst]]]></title><description><![CDATA[<p>Hey,<br />
ich Programmiere gerade zur Übung an ein paar Übungsaufgaben.<br />
Jetzt ist es meine Aufgabe Einen Destruktor zu schreiben und Speicherleeks zu überprüfen.</p>
<p>MyVektor.h</p>
<pre><code>class MyVektor{
private:
	int dim;
	int* feld;
public:
	MyVektor();
	MyVektor(const int&amp;);
	~MyVektor();
};
</code></pre>
<p>MyVektor.c++</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;MyVektor.h&quot;

MyVektor::MyVektor(){
	MyVektor::feld=new int[1];
	MyVektor::dim=1;
}
MyVektor::MyVektor(const int&amp; a){
	MyVektor::feld=new int[a];
	MyVektor::dim=a;
}
MyVektor::~MyVektor(){
	delete MyVektor::feld;
}
</code></pre>
<p>main:</p>
<pre><code>MyVektor veki;
delete veki;
cout&lt;&lt;_CrtDumpMemoryLeaks()&lt;&lt;endl;
</code></pre>
<p>Naja der Kompiler meckert sobald ich &quot;delete veki;&quot; aufrufe. Im Script steht aber, dass man so einen DEstruktor aufruft.^^<br />
Bitte sagt mir was ich falsch gemacht hab.<br />
Gruß Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/269988/destruktor-aufruf-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 19:57:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/269988.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Jul 2010 08:10:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:59:19 GMT]]></title><description><![CDATA[<p>Hey,<br />
ich Programmiere gerade zur Übung an ein paar Übungsaufgaben.<br />
Jetzt ist es meine Aufgabe Einen Destruktor zu schreiben und Speicherleeks zu überprüfen.</p>
<p>MyVektor.h</p>
<pre><code>class MyVektor{
private:
	int dim;
	int* feld;
public:
	MyVektor();
	MyVektor(const int&amp;);
	~MyVektor();
};
</code></pre>
<p>MyVektor.c++</p>
<pre><code>#include &quot;stdafx.h&quot;
#include &quot;MyVektor.h&quot;

MyVektor::MyVektor(){
	MyVektor::feld=new int[1];
	MyVektor::dim=1;
}
MyVektor::MyVektor(const int&amp; a){
	MyVektor::feld=new int[a];
	MyVektor::dim=a;
}
MyVektor::~MyVektor(){
	delete MyVektor::feld;
}
</code></pre>
<p>main:</p>
<pre><code>MyVektor veki;
delete veki;
cout&lt;&lt;_CrtDumpMemoryLeaks()&lt;&lt;endl;
</code></pre>
<p>Naja der Kompiler meckert sobald ich &quot;delete veki;&quot; aufrufe. Im Script steht aber, dass man so einen DEstruktor aufruft.^^<br />
Bitte sagt mir was ich falsch gemacht hab.<br />
Gruß Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921424</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:20:38 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>Naja der Kompiler meckert sobald ich &quot;delete veki;&quot; aufrufe. Im Script steht aber, dass man so einen DEstruktor aufruft.^^</p>
</blockquote>
<p>Dann ist dein Script falsch. <code>delete</code> geht nur, wenn man das Objekt mit <code>new</code> angelegt hat.</p>
<p>Dein Objekt hingegen zerstört sich selbst, sobald es den aktuellen Gültigkeitsbereich verlässt.</p>
<p>Edit: (offtopic) dieses ständige <code>MyVector::</code> vor allen Anweisungen ist nicht viel mehr eine dämliche Art, den Code absichtlich schlecht lesbar zu machen, ohne davon auch nur den geringsten Vorteil zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921428</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:30:20 GMT]]></title><description><![CDATA[<p>Jo danke für den Stil tip aber meine Frage wird nciht beantwortet.<br />
Toll, wenn das Objekt seinen Gültigkeitsbereicht verlässt, dass sagt mir jetzt viel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f623.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--persevering_face"
      title="&gt;.&lt;"
      alt="😣"
    /><br />
ich hab mal im Destruktor ne textausgabe aufgerufen und somald main beendet wird wird auch der Destruktor aufgerufen.<br />
Ich will ihn aber Explizit aufrufen.<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921433</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:32:08 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>Ich will ihn aber Explizit aufrufen.</p>
</blockquote>
<p>Warum? Aber auch da hat Nukularfüsiker schon den passenden Tip gegeben. (Hilfe: Das Schlüsselwort hat 3 Buchstaben und fängt mit &quot;n&quot; an...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921435</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:32:08 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:36:07 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>Jo danke für den Stil tip aber meine Frage wird nciht beantwortet.</p>
</blockquote>
<p>Nicht? Ich dachte eigentlich schon.</p>
<blockquote>
<p>Ich will ihn aber Explizit aufrufen.</p>
</blockquote>
<p>Das brauchst du nicht und solltest du auch nicht. Entweder das Objekt fällt aus dem Gültigkeitsbereich (kennst du nicht? Lesen bildet!) oder du löschst es mit <code>delete</code> nach einem vorherigen <code>new</code> , in beiden Fällen wird implizit(!) der Destruktor aufgerufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921437</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:46:18 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<pre><code>MyVektor veki;
delete veki;
cout&lt;&lt;_CrtDumpMemoryLeaks()&lt;&lt;endl;
</code></pre>
<p>Naja der Kompiler meckert sobald ich &quot;delete veki;&quot; aufrufe. Im Script steht aber, dass man so einen DEstruktor aufruft.^^</p>
</blockquote>
<p>Das ist falsch. delete ist das Gegenstück zu new, es ruft erst den Destruktor auf und gibt dann den angeforderten Speicher frei. delete kann nicht auf irgendwas anderes aufgerufen werden.</p>
<p>Einen Destruktor kann man wie jede Memberfunktion aufrufen:</p>
<pre><code class="language-cpp">veki.~MyVektor();
</code></pre>
<p>Es gilt aber das von den anderen gesagte: Der Destruktor wird auch automatisch beim Verlassen des Gültigkeitsbereiches aufgerufen (also wenn die schließende geschweifte Klammer des Blockes, in dem veki definiert wurde, überschritten wird). Dann wird das Objekt zum zweiten mal zerstört, was normalerweise fatale Konsequenzen hat.<br />
In normalem Anwendungscode wird man daher so gut wie nie explizite Destruktoraufrufe finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921441</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 08:57:31 GMT]]></title><description><![CDATA[<p>Danke für die ausführliche Antwort Bashar. Hat sehr geholfen!<br />
Und danke Nukular, dass du mich so schlau einordnest das ich alles was du in deiner Fachsprache sprichst schon weiß, direkt verstehe oder alles mal eben nachlese.<br />
Aber wie man sicher an meiner Fragestellung erkennt fange ich gerade mit C++ an. Wenn ich jedes kleine Detail speziell weiterverfolgen würde, würde ich nicht weiterkommen. Mir geht es erstmal darum basics zu verstehen.</p>
<p>Um nochmal zurück zum Thema zu kommen, meine Aufgabe ist es, genau zu erkennen. Wo Destruktoren und Konstruktoren eingesetzt werden. desshalb auch</p>
<pre><code>cout&lt;&lt;_CrtDumpMemoryLeaks()&lt;&lt;endl;
</code></pre>
<p>welches bis jetzt immer 1 zurück gegeben hat.<br />
Dank dem Tip mit new</p>
<pre><code>MyVektor* veki2= new MyVektor(4);
delete veki2;
cout&lt;&lt;_CrtDumpMemoryLeaks()&lt;&lt;endl;
</code></pre>
<p>konnte ich jetzt auch ma ne 0 erzeugen. Ich hoffe ich habs jetzt verstanden, danke für die Tips.<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921448</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Mon, 05 Jul 2010 08:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 09:06:46 GMT]]></title><description><![CDATA[<p>Rustyspoon schrieb:</p>
<blockquote>
<p>Dank dem Tip mit new</p>
<pre><code>MyVektor* veki2= new MyVektor(4);
delete veki2;
cout&lt;&lt;_CrtDumpMemoryLeaks()&lt;&lt;endl;
</code></pre>
<p>konnte ich jetzt auch ma ne 0 erzeugen. Ich hoffe ich habs jetzt verstanden,</p>
</blockquote>
<p>Du brauchst in dem Fall weder new noch delete.<br />
Machs so wie in deiner ersten main-Funktion die du oben gepostet hast, nur eben ohne das delete. An der Stelle wo die Funktion verlassen wird, wird der Vektor automatisch zerstört, und du brauchst dich nicht selber drum zu kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921455</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 05 Jul 2010 09:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 09:07:00 GMT]]></title><description><![CDATA[<p>Du musst übrigens mit new[] angeforderten Speicher mit delete[] freigeben, nicht mit einfachem delete, wie in deinem Destruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921456</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 05 Jul 2010 09:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 09:17:35 GMT]]></title><description><![CDATA[<p>Nochmal danke für die Antworten.<br />
Ich hab auch nicht vor in zukunft mit new die Objekte zu erzeugen.<br />
Hatte da auch nicht so ganz verstanden wie man Methoden damit aufruft. Desshalb erscheint mir die erste Variante für den einstieg soldieder.<br />
Sowohl was das merken der syntax angeht. Als auch die Schwierigkeiten die dabei auftreten könen wie &quot;delete[]&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921460</guid><dc:creator><![CDATA[Rustyspoon]]></dc:creator><pubDate>Mon, 05 Jul 2010 09:17:35 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor aufruf[Gelöst] on Mon, 05 Jul 2010 09:59:31 GMT]]></title><description><![CDATA[<p>Es ist nicht so, dass man, wie man gerade lustig ist, entweder die eine oder die andere Variante nimmt. Normalerweise sollte man auf new und delete verzichten, denn da ist immer eine Gefahr für Leaks gegeben (durch Exceptions o.ä.).<br />
Man brauch es aber, wenn man Variablen hat, die länger leben sollen als ihr Scope (hier bieten sich aber für größere Sicherheit Smartpointer an, die new und delete kapseln und wo man sich um das Aufräumen keine Sorgen machen musst) oder für dynamische Arrays, da man bei new[] die Größe zur Laufzeit angeben kann (dann sollte man aber auch Klassen wie vector nehmen, die das schon kapseln).</p>
<p>An sich gibt es somit im Anwendungscode wenige Stellen, wo man wirklich ein reines new und delete braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921476</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 05 Jul 2010 09:59:31 GMT</pubDate></item></channel></rss>