<?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[Virtueller Constructor]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es virtuelle Konstruktoren...<br />
Ich denke hier in erster Linie an den Copy-Constructor...</p>
<p>VirtCon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/132689/virtueller-constructor</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 17:00:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/132689.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Jan 2006 15:12:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 15:12:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>gibt es virtuelle Konstruktoren...<br />
Ich denke hier in erster Linie an den Copy-Constructor...</p>
<p>VirtCon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964676</guid><dc:creator><![CDATA[VirtCon]]></dc:creator><pubDate>Thu, 12 Jan 2006 15:12:06 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 15:15:26 GMT]]></title><description><![CDATA[<p>Shit...</p>
<p>Sollte ins C++-Forum...</p>
<p>Sorry...</p>
<p>Wer kann den Beitrag mal verschieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964681</guid><dc:creator><![CDATA[VirtCon]]></dc:creator><pubDate>Thu, 12 Jan 2006 15:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 15:18:02 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>es gibt auf jeden Fall virtuelle Destruktoren.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964684</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Jan 2006 15:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 15:27:08 GMT]]></title><description><![CDATA[<p>Hallo chrische5,</p>
<p>Destruktoren sollten eigentlich immer virtuell sein, hab ich gehört...<br />
(Auf jeden Fall, wenn von der Klasse abgeleitet wird)</p>
<p>Aber ne gute Frage:<br />
Wann brauchen Destruktoren nicht virtuell sein?<br />
Wenn von der Klasse nicht abgeleitet wird?</p>
<p>VirtCon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964688</guid><dc:creator><![CDATA[VirtCon]]></dc:creator><pubDate>Thu, 12 Jan 2006 15:27:08 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 15:31:59 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Also wenn du nicht ableitest, brauchst du auch den Destruktor nicht virtuell machen.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964690</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Jan 2006 15:31:59 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 16:44:13 GMT]]></title><description><![CDATA[<p>chrische5 schrieb:</p>
<blockquote>
<p>Also wenn du nicht ableitest, brauchst du auch den Destruktor nicht virtuell machen.</p>
</blockquote>
<p>Auch wenn du von einer Basisklasse ableiten möchtest, muss der Dtor nicht zwangsläufig virtuell sein. Es ist lediglich so, dass du in folgenden Konstrukten den Dtor virtuell machen musst, da alles andere undefiniert ist.</p>
<pre><code class="language-cpp">class base { ... };
class derived : public base { ... };

int main()
{
    base* base_ptr = new derived; // Basisklassen-Zeiger auf ein abgeleitetes Objekt.
    ...

    delete base_ptr; // undefiniertes Verhalten. (Meistens wird nur der Dtor der basisklasse aufgerufen).
}
</code></pre>
<p>Allerdings ist bei den meisten Klassen, die als Basisklassen fungieren sollen, der Dtor virtuell, damit obige Einschränkung nicht gilt.</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964777</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 12 Jan 2006 16:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 16:58:50 GMT]]></title><description><![CDATA[<p>VirtCon schrieb:</p>
<blockquote>
<p>Hallo,<br />
gibt es virtuelle Konstruktoren...<br />
Ich denke hier in erster Linie an den Copy-Constructor...</p>
</blockquote>
<p>Jein. Nein insofern, als dass sie von der Sprache nicht unterstützt werden. Ja insofern, da man sie sich basteln kann:</p>
<p>Wie? Beispiel:</p>
<pre><code class="language-cpp">class base
{ 
    public:
       virtual ~base() {}
       ...
};

class derived1 : public base { ... };
class derived2 : public base { ... };

base* create(const string&amp; what)
{
    if(what == &quot;derived1&quot;)
       return new derived1;
    else if(what == &quot;derived2&quot;)
       return new derived2;

    else
       // Fehlerbehandlung.
}

int main()
{
    base* derived1_obj = create(&quot;derived1&quot;);
    base* derived2_obj = create(&quot;derived2&quot;);

    ...

    delete derived1_obj;
    delete derived2_obj;
}
</code></pre>
<p>Mit dem obigen Beispiel wird ein &quot;virtueller Ctor&quot; simuliert. Je nach &quot;String-Wert&quot; von create(), wird entweder ein derived1 oder ein derived2 Objekt erzeugt.</p>
<p>Einen &quot;virtuellen Copy-Ctor&quot; kannst du dir z.B. schreiben, indem du in der Basisklasse eine rein-virtuelle Memberfunktion clone() definierst, die in den abgeleiteten Klassen entsprechend redefiniert wird. Jetzt noch eine Funktion copy(const base* const rhs) schreiben, die abhängig davon, worauf rhs zeigt, ein derived1 oder ein derived2 klont... usw.</p>
<p>Für weitere Informationen empfehle ich das Buch Mehr effektiv C++ programmieren von Scott Meyers. <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>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964790</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 12 Jan 2006 16:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 18:15:45 GMT]]></title><description><![CDATA[<p>Danke Caipi...</p>
<p>Dass ich es mit einer clone-Methode simulieren kann,<br />
ist mir klar... <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/964847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964847</guid><dc:creator><![CDATA[VirtCon]]></dc:creator><pubDate>Thu, 12 Jan 2006 18:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 20:02:15 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=13512" rel="nofollow">c.rackwitz</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=10" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/964952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964952</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 12 Jan 2006 20:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 20:10:01 GMT]]></title><description><![CDATA[<p>VirtCon schrieb:</p>
<blockquote>
<p>Danke Caipi...</p>
<p>Dass ich es mit einer clone-Methode simulieren kann,<br />
ist mir klar... <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>
</blockquote>
<p>Anders geht's auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964957</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Jan 2006 20:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Thu, 12 Jan 2006 21:22:00 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Caipi schrieb:</p>
<blockquote>
<p>chrische5 schrieb:</p>
<blockquote>
<p>Also wenn du nicht ableitest, brauchst du auch den Destruktor nicht virtuell machen.</p>
</blockquote>
<p>Auch wenn du von einer Basisklasse ableiten möchtest, muss der Dtor nicht zwangsläufig virtuell sein.</p>
</blockquote>
<p>Ich habe ja auch nicht geschriben, dass er virtuell sein muss, wenn man ableitet, sondern nur, dass es keinen Sinn macht den Destruktor virtuell zu machen, wenn man nicht ableitet. Optimiert der Compiler solche Sachen?</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965011</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 12 Jan 2006 21:22:00 GMT</pubDate></item><item><title><![CDATA[Reply to Virtueller Constructor on Fri, 13 Jan 2006 18:13:28 GMT]]></title><description><![CDATA[<p>Vermutlich nicht. Eine virtuelle Methode/Destruktor lässt den Compiler rtti erzeugen, dies macht er andernfalls nicht. Oft macht man nur deshalb einen virtuellen Destruktor, um rtti zu haben. Der Compiler müsste, um das wegzuoptimieren den ganzen Sourcecode nach dynamic_cast bezgl. deines Typs absuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965899</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 13 Jan 2006 18:13:28 GMT</pubDate></item></channel></rss>