<?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[Konstruktor &#x2F; Dekonstruktor]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielleicht kann mir jemand auf die Sprünge helfen bei einem Problem:</p>
<p>Wenn ich den Konstruktor einer Klasse auf rufe (im Konstruktor einer anderen),<br />
wird sofort danach der Dekonstruktor auf gerufen, d.H das Objekt<br />
wieder gelöscht.</p>
<p>Class A{<br />
A(int, int);<br />
~A();<br />
}</p>
<p>Class B{<br />
A *a_ptr;</p>
<p>B();<br />
~B();<br />
}</p>
<p>B::B(){<br />
a_ptr = new A(1,2);<br />
}</p>
<p>Wenn ich dann im Programmverlauf so etwas wie a_ptr-&gt;func() machen möchte<br />
zeigt der Zeiger ins nichts. Im Debugger zeigt sich dann, dass das Objekt<br />
sofort nach Erstellung gelöscht wird. Was mich wundert, ist dass gar nicht<br />
erst zurrückgesprungen wird (da die aufrufende Funktion/Klasse ja ihre<br />
daseinsberechtigung verlieren könnte und deshalb alles gelöscht wird), nein,<br />
der Dekunstruktor wird dirket nach dem Konstruktor aufgerufen.</p>
<p>Ich habe den Verdacht, dass ich da in einer klassischen Anfängerfalle tappe,<br />
danke schon mal <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>Lg<br />
Binary</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141572/konstruktor-dekonstruktor</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 14:17:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141572.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 23 Mar 2006 09:54:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor &#x2F; Dekonstruktor on Thu, 23 Mar 2006 09:54:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>vielleicht kann mir jemand auf die Sprünge helfen bei einem Problem:</p>
<p>Wenn ich den Konstruktor einer Klasse auf rufe (im Konstruktor einer anderen),<br />
wird sofort danach der Dekonstruktor auf gerufen, d.H das Objekt<br />
wieder gelöscht.</p>
<p>Class A{<br />
A(int, int);<br />
~A();<br />
}</p>
<p>Class B{<br />
A *a_ptr;</p>
<p>B();<br />
~B();<br />
}</p>
<p>B::B(){<br />
a_ptr = new A(1,2);<br />
}</p>
<p>Wenn ich dann im Programmverlauf so etwas wie a_ptr-&gt;func() machen möchte<br />
zeigt der Zeiger ins nichts. Im Debugger zeigt sich dann, dass das Objekt<br />
sofort nach Erstellung gelöscht wird. Was mich wundert, ist dass gar nicht<br />
erst zurrückgesprungen wird (da die aufrufende Funktion/Klasse ja ihre<br />
daseinsberechtigung verlieren könnte und deshalb alles gelöscht wird), nein,<br />
der Dekunstruktor wird dirket nach dem Konstruktor aufgerufen.</p>
<p>Ich habe den Verdacht, dass ich da in einer klassischen Anfängerfalle tappe,<br />
danke schon mal <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>Lg<br />
Binary</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1022225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022225</guid><dc:creator><![CDATA[Binarys]]></dc:creator><pubDate>Thu, 23 Mar 2006 09:54:17 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor &#x2F; Dekonstruktor on Thu, 23 Mar 2006 10:04:30 GMT]]></title><description><![CDATA[<p>Zeig doch mal bitte deinen kompletten Code - aus dem Schnipselchen kann man nicht wirklich etwas diagnostizieren. (vor allem: Wo und wie wird dein B-Objekt angelegt?)</p>
<p>PS: [cpp]-Tags sind eine nützliche Erfindung <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/1022238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1022238</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 23 Mar 2006 10:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor &#x2F; Dekonstruktor on Fri, 24 Mar 2006 15:01:04 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich konnte mein Problem lösen, a_ptr wurde verwendet obwohl aus einer statischen Funktion nicht sichtbar war.<br />
Es wird jetzt auch nicht mehr sofort der Dekonstruktor auf gerufen, aber der einzige Unterschied zu Vorher ist jetzt, dass das Objekt &quot;benutzt&quot; wird. (B<br />
Gibt es in C++ etwa so was wie den GarbagCollector in Java, der unreferenzierte Objekte löscht??</p>
<p>So noch mal mit tags: <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>
<pre><code class="language-cpp">Class A{
   A(int, int); // Class A Konstruktor /Dekonstruktor.
   ~A();
}
// [...] Implementierung von A.

Class B{
   A *a_ptr;   // deklaration eines Zeigers auf ein Objekt A

   B();       // Class B Konstruktor /Dekonstruktor
   ~B();
}

B::B(){       // Implementierung des B-Konstruktors
   a_ptr = new A(1,2); // Initialisierung von a_ptr
}

// [...] estlich Implementierung von B.

main(){

   B objB = new B();

   runMainLoop();

}
</code></pre>
<p>Das B-Objekt ist während der gesamten Laufzeit gültig.</p>
<p>Lg<br />
Binary</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023179</guid><dc:creator><![CDATA[Binarys]]></dc:creator><pubDate>Fri, 24 Mar 2006 15:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor &#x2F; Dekonstruktor on Fri, 24 Mar 2006 15:31:24 GMT]]></title><description><![CDATA[<p>nein! es gibt keinen garbage collector. deshalb musst du dich um die freigabe des speichers SELBER kümmern!<br />
deshalb sollte der B-destruktor so aussehen:</p>
<pre><code class="language-cpp">B::~B()
{
   delete a_ptr;
}
</code></pre>
<p>sonst speicherleiche...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023200</guid><dc:creator><![CDATA[prokaion]]></dc:creator><pubDate>Fri, 24 Mar 2006 15:31:24 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor &#x2F; Dekonstruktor on Fri, 24 Mar 2006 16:25:32 GMT]]></title><description><![CDATA[<p>Binarys schrieb:</p>
<blockquote>
<p>Gibt es in C++ etwa so was wie den GarbagCollector in Java, der unreferenzierte Objekte löscht??</p>
</blockquote>
<p>Nicht direkt, aber <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-134971.html" rel="nofollow">Smart Pointer</a> kommen dem schon recht nahe, du musst nur selber auf zyklische Referenzen aufpassen.</p>
<p>Und es macht sich immer besser den Originalcode (natürlich auf's relevante gekürzt!) ins Forum zu stellen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1023249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1023249</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 24 Mar 2006 16:25:32 GMT</pubDate></item></channel></rss>