<?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[Kopierkonstruktor mit vector auf rein virtuelle Klasse]]></title><description><![CDATA[<p>Hallo,<br />
Folgendes Problem:</p>
<p>Ich möchte einen Kopierkonstruktor für eine Klasse schereiben, welche einen vector mit Zeigern auf eine rein virtuelle Klasse besitzt.</p>
<p>wäre diese nicht rein virtuell hätte ich folgenden Ansatz im Kopierkonstruktor:</p>
<pre><code>for (unsigned int i=0;i&lt;orig.vector.size();i++)
{
MyClass *tmp = new MyClass;
*tmp=*orig.vector[i];
vector.push_back(tmp);

}
</code></pre>
<p>Leider kann ich den tmp Zeiger aber gar nicht erst erstellen, wenn es sich um eine rein virtuelle Klasse handelt.</p>
<p>Wie kann ich dies also Implementieren ?</p>
<p>Danke schonmal <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/topic/325605/kopierkonstruktor-mit-vector-auf-rein-virtuelle-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 05:04:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325605.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 May 2014 21:02:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 21:02:46 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Folgendes Problem:</p>
<p>Ich möchte einen Kopierkonstruktor für eine Klasse schereiben, welche einen vector mit Zeigern auf eine rein virtuelle Klasse besitzt.</p>
<p>wäre diese nicht rein virtuell hätte ich folgenden Ansatz im Kopierkonstruktor:</p>
<pre><code>for (unsigned int i=0;i&lt;orig.vector.size();i++)
{
MyClass *tmp = new MyClass;
*tmp=*orig.vector[i];
vector.push_back(tmp);

}
</code></pre>
<p>Leider kann ich den tmp Zeiger aber gar nicht erst erstellen, wenn es sich um eine rein virtuelle Klasse handelt.</p>
<p>Wie kann ich dies also Implementieren ?</p>
<p>Danke schonmal <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/2398362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398362</guid><dc:creator><![CDATA[DaJon_]]></dc:creator><pubDate>Fri, 09 May 2014 21:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 21:21:12 GMT]]></title><description><![CDATA[<p>Du kannst den <code>vector</code> nicht so einfach ohne weiteres kopieren, weil du dafür die most-derived-objects kopieren müsstest, also die eigentlichen Objekte auf die der Zeiger zeigt. Dafür musst du schon eine virtuelle <code>clone()</code> -Funktion o.ä implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398370</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 09 May 2014 21:21:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 21:36:17 GMT]]></title><description><![CDATA[<p>/* removed */</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398371</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Fri, 09 May 2014 21:36:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 21:26:34 GMT]]></title><description><![CDATA[<p>Dein virtuelle Klasse braucht eine clone-Methode, d.h. eine Methode, die einen Zeiger auf eine Kopie des momentanen Objekts zurück gibt. Der Trick ist, wenn diese Methode selber virtual ist, dann bekommst du ein Objekt der passenden abgeleiteten Klasse. Der Rückgabetyp der virtuellen Methode braucht übrigens kein Basisklassenzeiger zu sein. Es ist durchaus erlaubt eine virtuelle Methode mit einer anderen Methode zu überschreiben, die einen spezialisierteren Zeigertyp zurück gibt. Die Clonemethode kann also in jeder Klasse den passenden Rückgabewert haben.</p>
<p>Man kann auch noch einen Schritt weiter gehen (oder auch noch mehrere Schritte) und CRTP benutzen, um die clone-Methode zu implementieren und dabei Codeduplikationen zu vermeiden. Das wird beispielsweise hier erklärt:<br />
<a href="http://katyscode.wordpress.com/2013/08/22/c-polymorphic-cloning-and-the-crtp-curiously-recurring-template-pattern/" rel="nofollow">http://katyscode.wordpress.com/2013/08/22/c-polymorphic-cloning-and-the-crtp-curiously-recurring-template-pattern/</a><br />
(in dem Link wird als Einführung auch die einfache Methode, die ich im ersten Absatz angesprochen habe, erklärt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398372</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 May 2014 21:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 23:12:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Es ist durchaus erlaubt eine virtuelle Methode mit einer anderen Methode zu überschreiben, die einen spezialisierteren Zeigertyp zurück gibt.</p>
</blockquote>
<p>Stichwort kovariante Rückgabetypen (engl. <em>covariant return types</em>).</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Hast du dir den Link eigentlich mal angeschaut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398393</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 09 May 2014 23:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 23:27:30 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Hast du dir den Link eigentlich mal angeschaut?</p>
</blockquote>
<p>Nur überflogen. Gehe ich aufgrund deiner Frage Recht in der Annahme, dass da Blödsinn erzählt wird? Ich habe bloß Stichproben genommen, da es doch recht viel Text war zu einem Thema, welches ich sowieso schon kenne und daher nicht vollständig lesen wollte. Besagte Stichproben sahen aber nicht schlecht aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398394</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 May 2014 23:27:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor mit vector auf rein virtuelle Klasse on Fri, 09 May 2014 23:52:23 GMT]]></title><description><![CDATA[<blockquote>
<p>Gehe ich aufgrund deiner Frage Recht in der Annahme, dass da Blödsinn erzählt wird?</p>
</blockquote>
<p>Nein. Mir war nur mulmig wegen dem Abschnitt, in dem die Nutzung von Makros für dieses Problem gepriesen wurde...<br />
Außerdem immer sowas wie &quot;nur zu Darstellungszwecken&quot;, &quot;das sollte in echtem Code nicht verwendet werden&quot;, usw. voll am heißen Brei vorbei- und potenzielle Fehler und suboptimale Implementierungsdetails wegreden. Außerdem wird die bessere C++03-Lösung zum Konstruktor-Forwarden (nämlich mit Funktionstemplates) nicht gezeigt (sondern eine Schlechtere, das ist der Punkt) und lediglich verlinkt, das ist dann aber schon alles von mir an den Haaren herbeigezogen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Außerdem wird in den Kommentaren deutlich, dass der Autor bspw. auch nicht wusste, dass virtuelle Basisklassen einen virtuellen Destruktor brauchen. Irgendwie gruselig, dass jemand dann so einen Artikel postet und dicke Hauer von den Mitlesern aufgesammelt um im Nachhinein ausradiert zu werden.<br />
Edit²: Stimmt wiederum nicht ganz:</p>
<blockquote>
<p><strong>I’m aware of these things</strong>, I tried to just make the examples bare bones without any distractions, and when it concerns returning a pointer, the patterns in the article don’t just apply to C++11. <strong>Maybe I should have added in a virtual destructor though.</strong></p>
</blockquote>
<p>Also so halb-pseudomäßiger-Code. Bin mir nicht sicher, was ich glauben soll. Aber der Kommentator hat Recht, so einige Anfänger werden das direkt so übernehmen...</p>
<p>Edit: Nvm, für den TE wird es locker reichen, ist ja eine gute Erklärung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2398398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2398398</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 09 May 2014 23:52:23 GMT</pubDate></item></channel></rss>