<?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[Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe folgende Typen von Objekten:</p>
<pre><code class="language-cpp">class OClass {
    foo();
    ...
}

class UClass1 : OClass {
    blub();
    ...
}

class UClass2 : OClass {
    ...
}
</code></pre>
<p>Nun bekomme ich zur Laufzeit erst mitgeteilt, wieviele Objekte von UClass1 und UClass2 ich brauche.<br />
Da ich auch oft wahlfrei auf diese zugreifen muss, wollte ich sie neu anlegen, in einem Vektor speichern, benutzen und am Ende des Programms wieder löschen. Vorstellen tu ich mir das etwa so (nur klappt das nich):</p>
<pre><code class="language-cpp">vector v&lt;OClass *&gt;;

int count1 = getAmountUClass1();
int count2 = getAmountUClass2();

// Objekte erstellen (funktioniert so)
UClass1 * clas1;
for (int i = 0; i &lt; count1; i++) {
    clas1 = new UClass1(parameters);
    v.push_back(clas1);
}

...

// benutzen klappt
v.at(0)-&gt;foo();
// benutzen (klappt nicht)
v.at(0)-&gt;blub();

...

// löschen (lässt sich compilieren - aber obs funktioniert weiß ich nicht)
for (int i = 0; i &lt; v.size(); i++) {
    delete v.at(i);
}
</code></pre>
<p>Klappt so nicht bedeutet in diesem Fall, dass es sich bereits nicht kompilieren lässt.</p>
<p>Wer kann mir da mal auf die Sprünge helfen ? Vermute, das ich gar nicht so schwer nur ist &quot;drauflosraten&quot; auch unschön.</p>
<p>Vielen Dank &amp; Viele Grüße,<br />
Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/141372/problem-frage-mit-new-delete-und-dynamisch-erzeugten-objekten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 11:05:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141372.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Mar 2006 13:15:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 13:21:39 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe folgende Typen von Objekten:</p>
<pre><code class="language-cpp">class OClass {
    foo();
    ...
}

class UClass1 : OClass {
    blub();
    ...
}

class UClass2 : OClass {
    ...
}
</code></pre>
<p>Nun bekomme ich zur Laufzeit erst mitgeteilt, wieviele Objekte von UClass1 und UClass2 ich brauche.<br />
Da ich auch oft wahlfrei auf diese zugreifen muss, wollte ich sie neu anlegen, in einem Vektor speichern, benutzen und am Ende des Programms wieder löschen. Vorstellen tu ich mir das etwa so (nur klappt das nich):</p>
<pre><code class="language-cpp">vector v&lt;OClass *&gt;;

int count1 = getAmountUClass1();
int count2 = getAmountUClass2();

// Objekte erstellen (funktioniert so)
UClass1 * clas1;
for (int i = 0; i &lt; count1; i++) {
    clas1 = new UClass1(parameters);
    v.push_back(clas1);
}

...

// benutzen klappt
v.at(0)-&gt;foo();
// benutzen (klappt nicht)
v.at(0)-&gt;blub();

...

// löschen (lässt sich compilieren - aber obs funktioniert weiß ich nicht)
for (int i = 0; i &lt; v.size(); i++) {
    delete v.at(i);
}
</code></pre>
<p>Klappt so nicht bedeutet in diesem Fall, dass es sich bereits nicht kompilieren lässt.</p>
<p>Wer kann mir da mal auf die Sprünge helfen ? Vermute, das ich gar nicht so schwer nur ist &quot;drauflosraten&quot; auch unschön.</p>
<p>Vielen Dank &amp; Viele Grüße,<br />
Benjamin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021031</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Tue, 21 Mar 2006 13:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 13:19:42 GMT]]></title><description><![CDATA[<p>Du kannst über ein bestimmtes Objekt nur auf die Methoden zugreifen, die es selber definiert (oder vererbt) - auch wenn es in Wahrheit eine ganz andere Klasse ist (d.h. selbst wenn du in Wahrheit ein &quot;UClass1&quot;-Objekt hast, kannst du nur die Methoden von &quot;OClass&quot; ansprechen.</p>
<p>Lösung wäre es, alle benötigten Methoden in der Basisklasse zu definieren und dann in jeder abgeleiteten Klasse zu überschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021038</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 21 Mar 2006 13:19:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 13:22:30 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Erstmal, was für Fehler kommen denn?</p>
<p>Und was mir beim überfliegen gleich auf fällt:</p>
<pre><code class="language-cpp">vector&lt; OClass *&gt; v;
</code></pre>
<p>Edit: Genau, mach OClass Abstrakt und alle Methoden rein virtuell. Außerdem nich vergessen den Destruktor virtuell zu machen! <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>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021039</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 21 Mar 2006 13:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 13:28:44 GMT]]></title><description><![CDATA[<p>Der Fehler der bei</p>
<pre><code class="language-cpp">v.at(0)-&gt;blub();
</code></pre>
<p>vom Compiler gemeldet wird, ist der, dass er die Funktion nicht findet.</p>
<p>Was soll mit demhier sein? :</p>
<pre><code class="language-cpp">vector&lt; OClass *&gt; v;
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>:<br />
Das ist aber doof, weil die nur beiden Unterklassen jeweils ~10 verschiedene Funktionen haben (mit denen die andere nix anfangen könnte) und nur 4 gemeinsame.<br />
<strong>edit:</strong><br />
Will sagen: Gibt es keine andere Lösungsmöglichkeit ?</p>
<p>Danke schonmal soweit !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021050</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Tue, 21 Mar 2006 13:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 13:31:03 GMT]]></title><description><![CDATA[<p>Hi!</p>
<pre><code class="language-cpp">vector&lt; OClass *&gt; v;
</code></pre>
<p>Damist ist, das es bei dir im Qellcode total verdreht ist...</p>
<pre><code class="language-cpp">vector v&lt;OClass *&gt;;
</code></pre>
<blockquote>
<p>Das ist aber doof, weil die nur beiden Unterklassen jeweils ~10 verschiedene Funktionen haben (mit denen die andere nix anfangen könnte) und nur 4 gemeinsame</p>
</blockquote>
<p>Du kommst halt nich drum rum. Evtl. ganz unschön mit rumgecaste, daran will ich aber garnich denken! <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>Du kannst ja die Methoden überschreiben, so das ein Fehler auftritt falls sie (fälschlicherweise) aufgerufen wird.</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021056</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021056</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Tue, 21 Mar 2006 13:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 14:16:49 GMT]]></title><description><![CDATA[<p>ok, ich machs erstmal so, dass ich die betroffenen funktionen die ich akut brauche in die basisklasse packe.</p>
<p>dann bleibt meine letzte frage noch offen:</p>
<pre><code class="language-cpp">// Objekte erstellen
UClass1 * clas1;
for (int i = 0; i &lt; count1; i++) {
    clas1 = new UClass1(parameters);
    v.push_back(clas1);
}

// löschen (lässt sich compilieren - aber obs funktioniert weiß ich nicht)
for (int i = 0; i &lt; v.size(); i++) {
    delete v.at(i);
}
</code></pre>
<p>Funktioniert das Löschen ? Ich wüßte nicht, wie ich üerprüfen kann, ob meine mit &quot;new&quot; angelegten Objekte auch wirklich gelöscht werden. Wäre auf Dauer ziemlich übel wenn dem nicht so ist <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/1021094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021094</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Tue, 21 Mar 2006 14:16:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 14:21:35 GMT]]></title><description><![CDATA[<p>Warum benutzt du nicht einfach zwei Vektoren? Einen für UClass1-Objekte, einen für die UClass2-Objekte. Dann würdest auch auch new und delete verzichten können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021099</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 21 Mar 2006 14:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 14:21:38 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Ich wüßte nicht, wie ich üerprüfen kann, ob meine mit &quot;new&quot; angelegten Objekte auch wirklich gelöscht werden</p>
</blockquote>
<p>Du kannst dir im Destruktor von UClass1 eine Ausgabe auf zum Beispiel std::cout machen. dann siehst du wann was gelöscht wird.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021100</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 21 Mar 2006 14:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 14:54:45 GMT]]></title><description><![CDATA[<p>Zwei Vectoren benutzen ist in dem Fall kontraproduktiv, weil ich dann jeweils vorher entscheiden müsste, in welchem der Vektoren denn das gewünschte Objekt liegt. Eine Eigenschaft der Oberklasse netscheidet, welches Objekt konkret angesprochen werden soll.<br />
Da müsste ich dann jedesmal durch zwei Vektoren durchgucken. Denke, da ist der Overhead nicht unbeträchtlich (das ganze passiert oft).</p>
<p>Das mit dem cout im Destruktor habe ich probiert und es funktioniert. Danke. Eigentlich ja ganz einfach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021134</guid><dc:creator><![CDATA[Benja_m]]></dc:creator><pubDate>Tue, 21 Mar 2006 14:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem&#x2F;Frage mit new&#x2F;delete und dynamisch erzeugten Objekten on Tue, 21 Mar 2006 19:12:04 GMT]]></title><description><![CDATA[<p>Vorweg: Meine Erfahrung ist noch sehr begrenzt, aber wieso löst Du das Problem nicht mit dynamic_cast? Evtl. zu zeitintensiv, zuviel overhead?<br />
Bin mir nicht sicher, was für Nachteile man evtl. alles mit einem dynamic_cast bekommt.</p>
<p>Aber man könnte doch einfach:</p>
<pre><code class="language-cpp">...
if (UClass1* v2 = dynamic_cast&lt;UClass1*&gt;(v.at(0))) {
    v2-&gt;blub();
}
else if (UClass2* v2 = dynamic_cast&lt;UClass2*&gt;(v.at(0))) {
    ...
}
...
</code></pre>
<p>machen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1021276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1021276</guid><dc:creator><![CDATA[mantiz]]></dc:creator><pubDate>Tue, 21 Mar 2006 19:12:04 GMT</pubDate></item></channel></rss>