<?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 Frage]]></title><description><![CDATA[<p>Hallo ich habe eine Klasse in der ein Vektor von sagen wir int ist.</p>
<p>Wenn ich jetzt ein zuvor angelegtes Objekt dieser Klasse lösche<br />
muss ich dann in der Kasse einen Destruktor einbauen,</p>
<p>der mittels erase() alle elemente einzeln aus dem vektor löscht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171727/destruktor-frage</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 12:37:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171727.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Jan 2007 18:42:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 18:42:12 GMT]]></title><description><![CDATA[<p>Hallo ich habe eine Klasse in der ein Vektor von sagen wir int ist.</p>
<p>Wenn ich jetzt ein zuvor angelegtes Objekt dieser Klasse lösche<br />
muss ich dann in der Kasse einen Destruktor einbauen,</p>
<p>der mittels erase() alle elemente einzeln aus dem vektor löscht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218792</guid><dc:creator><![CDATA[Turboingo]]></dc:creator><pubDate>Sun, 28 Jan 2007 18:42:12 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 19:26:52 GMT]]></title><description><![CDATA[<p>Das kommt darauf an. Ist das Array mit einer festen größe versehen, mußt du nichts tun.<br />
Bsp:</p>
<pre><code class="language-cpp">int a[10];
</code></pre>
<p>Hier reicht der Standartdestructor der einfach alles freigibt.<br />
Hast du jedoch einen Zeiger auf int und erstellst das Array mit new[] dann mußt du einen Destructor Basteln der über delete[] den Speicher freigibt.<br />
Bsp:</p>
<pre><code class="language-cpp">int *a;
Konstruktor(int größe)
{
a=new int[größe]
}
~Destructor()
{
delete[] a;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1218815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218815</guid><dc:creator><![CDATA[Raven2]]></dc:creator><pubDate>Sun, 28 Jan 2007 19:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 19:29:48 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Wenn du einen std::vector hast, brauchst du nix in den D'tor schreiben.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218816</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 28 Jan 2007 19:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 19:38:25 GMT]]></title><description><![CDATA[<p>chrische5 schrieb:</p>
<blockquote>
<p>Wenn du einen std::vector hast, brauchst du nix in den D'tor schreiben.</p>
</blockquote>
<p>Gilt aber auch nur, wenn man z.B. einen std::vector&lt;Foo&gt; hat und nicht einen std::vector&lt;Foo*&gt;, bei dem jedem Element mit new Speicher zugewiesen wurde. Den muss man schon vorher auch killen.</p>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218822</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Sun, 28 Jan 2007 19:38:25 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 19:57:40 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Klar, aber er schrieb, dass er einen vector mit ints hat. Meine Aussage war aber wirklich zu allgemein.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218826</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 28 Jan 2007 19:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 20:24:15 GMT]]></title><description><![CDATA[<p>Hi ich habe sowas in der Art</p>
<pre><code>class A1{

 User* u1;

 private: 
 vector&lt;User&gt; liste;

 public:
 A1();
}

A1::A1(){

 u1 = new User(a,b,c); 
 liste.push_back(*u1);

 u1 = new User(d,e,f); 
 liste.push_back(*u1);

 u1 = new User(g,h,i); 
 liste.push_back(*u1);

 usw..

}
</code></pre>
<p>Wenn ich jetzt in Klasse B ein objekt von A Anlege nud es wieder lösche<br />
brauche ich dann einen Desrutktor in A der den Vektor durchgeht und löscht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218846</guid><dc:creator><![CDATA[Turboingo]]></dc:creator><pubDate>Sun, 28 Jan 2007 20:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor Frage on Sun, 28 Jan 2007 21:10:19 GMT]]></title><description><![CDATA[<p>Da brauchst Du keinen Destruktor, da das Kind sowieso schon in den Brunnen gefallen ist.</p>
<p>Diese Codesequenz:</p>
<pre><code class="language-cpp">u1 = new User(a,b,c); 
 liste.push_back(*u1);

 u1 = new User(d,e,f);
</code></pre>
<p>erzeugt einen Memory-leak unabhängig davon, ob er im Konstruktor steht oder woanders.</p>
<p>Du erzeugst dynamisch eine Instanz der Klasse User. Den Zeiger darauf speicherst Du in einer Variablen u1. Mit diesem push_back steckst Du eine Instand der Klasse User in den Vektor, indem Du deinen Zeiger dereferenzierst. Der Compiler ruft daraufhin den Copy-Konstruktor von User auf, um eine Instanz von User zu erzeugen. Du hast also jetzt 2 Instanzen der Klasse User: einen im Vektor und einen, den du mit dem Zeiger referenzierst. Als nächstes überschreibst Du den Wert des Zeigers u1. Damit verlierst Du die Möglichkeit, deine dynamisch angelegte Instanz zu referenzieren, um sie beispielsweise mit delete frei zu geben.</p>
<p>Ein kleinere Unschönheit ist, daß Du die Variable u1 als Klassenvariable, statt als lokale Variable definierst.</p>
<p>Also besser wäre:</p>
<pre><code class="language-cpp">class A1
{
    vector&lt;User&gt; liste;

  public:
    A1();
};

A1::A1(){

 liste.push_back(User(a,b,c));
 liste.push_back(User(d,e,f));
 liste.push_back(User(g,h,i));

 usw..

}
</code></pre>
<p>Sieht auch viel kompakter aus und es kommen keine Zeiger mehr vor.</p>
<p>Die Moral von der Geschichte ist, daß man Zeiger nicht verwenden sollte, wenn sie denn nicht unbedingt notwendig sind (was relativ selten der Fall ist).</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1218873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1218873</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Sun, 28 Jan 2007 21:10:19 GMT</pubDate></item></channel></rss>