<?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[Stilfrage: Instanziierung von polymorphen Objekten]]></title><description><![CDATA[<p>Gehen wir aus von einem Kontainer von Polymorphen Objekten, zB<br />
std::list&lt;Base*&gt; container;</p>
<p>Sei<br />
class Derived : public Base<br />
eine konkrete abgeleitete Klasse.</p>
<p>Im Code wo die Objekte erzeugt werden, schreibt man lieber</p>
<p>Derived* object = new Derived();<br />
oder<br />
Base* object = new Derived();<br />
?</p>
<p>wenn man später<br />
container.push_back(object);<br />
oder etwas vergleichbares macht. (zB einen polymorphe Aufruf die nur einen Base* braucht)</p>
<p>Natürlich ist beides gleichwertig, deshalb nur ein Stilfrage.<br />
Aber gibt es hierzu Richtlinien?<br />
Stil #2 hat für mich den Vorteil dass es leichter zu analysieren und refactorn wäre, wenn die Zeile hunderte male im Code auftaucht (mit verschiedenen Deriveds).<br />
Stil #1 ist expliziter, und natürlich dann zwingend wenn man noch Derived-spezifischen Code anbringen möchte bevor man das Objekt &quot;abgibt&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/340367/stilfrage-instanziierung-von-polymorphen-objekten</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 05:38:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/340367.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Nov 2016 09:58:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stilfrage: Instanziierung von polymorphen Objekten on Thu, 03 Nov 2016 09:58:32 GMT]]></title><description><![CDATA[<p>Gehen wir aus von einem Kontainer von Polymorphen Objekten, zB<br />
std::list&lt;Base*&gt; container;</p>
<p>Sei<br />
class Derived : public Base<br />
eine konkrete abgeleitete Klasse.</p>
<p>Im Code wo die Objekte erzeugt werden, schreibt man lieber</p>
<p>Derived* object = new Derived();<br />
oder<br />
Base* object = new Derived();<br />
?</p>
<p>wenn man später<br />
container.push_back(object);<br />
oder etwas vergleichbares macht. (zB einen polymorphe Aufruf die nur einen Base* braucht)</p>
<p>Natürlich ist beides gleichwertig, deshalb nur ein Stilfrage.<br />
Aber gibt es hierzu Richtlinien?<br />
Stil #2 hat für mich den Vorteil dass es leichter zu analysieren und refactorn wäre, wenn die Zeile hunderte male im Code auftaucht (mit verschiedenen Deriveds).<br />
Stil #1 ist expliziter, und natürlich dann zwingend wenn man noch Derived-spezifischen Code anbringen möchte bevor man das Objekt &quot;abgibt&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513973</guid><dc:creator><![CDATA[scrontch]]></dc:creator><pubDate>Thu, 03 Nov 2016 09:58:32 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: Instanziierung von polymorphen Objekten on Thu, 03 Nov 2016 10:05:15 GMT]]></title><description><![CDATA[<p>Logischerweise dürfte der erste Fall hier gar nicht vorkommen. Denn dort weißt du ja schon zur Compilezeit, was für ein Typ das ist und bräuchtest in der Folge weder einen gemeinsamen Container, noch Polymorphie. Ich will natürlich nicht ausschließen, dass genau dies der Fall ist; Polymorphie wird gerne benutzt, wo sie nicht nötig wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513975</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 03 Nov 2016 10:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: Instanziierung von polymorphen Objekten on Thu, 03 Nov 2016 10:20:01 GMT]]></title><description><![CDATA[<p>scrontch schrieb:</p>
<blockquote>
<p>Im Code wo die Objekte erzeugt werden, schreibt man lieber</p>
<p>Derived* object = new Derived();<br />
oder<br />
Base* object = new Derived();</p>
</blockquote>
<p>Weder noch, man benutzt Smart Pointer und dann entweder std::make_unique oder std::make_shared <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>Aber da du auch dort um die Angabe des Typs nicht herumkommst, schließe ich mich diesbezüglich SeppJ an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513978</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 03 Nov 2016 10:20:01 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: Instanziierung von polymorphen Objekten on Thu, 03 Nov 2016 11:09:13 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Logischerweise dürfte der erste Fall hier gar nicht vorkommen. Denn dort weißt du ja schon zur Compilezeit, was für ein Typ das ist und bräuchtest in der Folge weder einen gemeinsamen Container, noch Polymorphie. Ich will natürlich nicht ausschließen, dass genau dies der Fall ist; Polymorphie wird gerne benutzt, wo sie nicht nötig wäre.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Natürlich weiss ich bei Erzeugung welchen Typ ich erzeuge.<br />
Erst später (an anderer Stelle) weiss ich es nicht mehr.<br />
Geh von dutzenden verschiedenen Derived-Typen aus die an unterschiedlichen Stellen instanziert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513982</guid><dc:creator><![CDATA[scrontch]]></dc:creator><pubDate>Thu, 03 Nov 2016 11:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: Instanziierung von polymorphen Objekten on Thu, 03 Nov 2016 12:38:48 GMT]]></title><description><![CDATA[<p>auto object = new Derived();<br />
Problem gelöst <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/2513990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513990</guid><dc:creator><![CDATA[autogast]]></dc:creator><pubDate>Thu, 03 Nov 2016 12:38:48 GMT</pubDate></item><item><title><![CDATA[Reply to Stilfrage: Instanziierung von polymorphen Objekten on Thu, 03 Nov 2016 13:18:45 GMT]]></title><description><![CDATA[<p>autogast schrieb:</p>
<blockquote>
<p>auto object = new Derived();</p>
</blockquote>
<p>Nice. Daran hatte ich noch gar nicht Gedacht <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="😃"
    /><br />
(Codebase ist älter)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513994</guid><dc:creator><![CDATA[scrontch]]></dc:creator><pubDate>Thu, 03 Nov 2016 13:18:45 GMT</pubDate></item></channel></rss>