<?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[Initialisierungsliste im Ctor]]></title><description><![CDATA[<p>Abend,</p>
<p>sagen wir ich habe eine Klasse mit einigen Membern:</p>
<pre><code class="language-cpp">Class Foo {
   A a;
   B b;
   C c;
   D* d;

};
</code></pre>
<p>Im Ctor von Foo könnte ich einige Member in der Initialisierungsliste initialisieren, andere kann ich erst im Ctor Rumpf durch Berechnungen setzen. Also in etwa so:</p>
<pre><code class="language-cpp">Foo::Foo(B myB, int bla) : b(myB) {
   // Rechnungen
   a = compute(bla);
   c = computeNochwas();
}
</code></pre>
<p>Meine Frage: Wenn ich nur MANCHE Member in einer Initialisierungsliste initialisieren kann, lass ich dann die Initialisierungsliste besser ganz weg? Oder ist es ok die Member die man sofort initialisieren kann in der Initialisierungsliste zu setzen und den Rest im Ctor-Rumpf?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264773/initialisierungsliste-im-ctor</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 07:24:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264773.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Apr 2010 17:52:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 17:52:52 GMT]]></title><description><![CDATA[<p>Abend,</p>
<p>sagen wir ich habe eine Klasse mit einigen Membern:</p>
<pre><code class="language-cpp">Class Foo {
   A a;
   B b;
   C c;
   D* d;

};
</code></pre>
<p>Im Ctor von Foo könnte ich einige Member in der Initialisierungsliste initialisieren, andere kann ich erst im Ctor Rumpf durch Berechnungen setzen. Also in etwa so:</p>
<pre><code class="language-cpp">Foo::Foo(B myB, int bla) : b(myB) {
   // Rechnungen
   a = compute(bla);
   c = computeNochwas();
}
</code></pre>
<p>Meine Frage: Wenn ich nur MANCHE Member in einer Initialisierungsliste initialisieren kann, lass ich dann die Initialisierungsliste besser ganz weg? Oder ist es ok die Member die man sofort initialisieren kann in der Initialisierungsliste zu setzen und den Rest im Ctor-Rumpf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881719</guid><dc:creator><![CDATA[DasWandelndeSchloss]]></dc:creator><pubDate>Mon, 12 Apr 2010 17:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 17:58:48 GMT]]></title><description><![CDATA[<p>Du darfst in den Initialisierungslisten durchaus rechnen, kein Problem.</p>
<p>Und selbst wenn dir Rechnung doch nicht in die Initialisierungsliste passen sollte: Welchen Vorteil versprichst du dir dadurch, die Initialisierungsliste nicht zu benutzen? Ich sehe bloß die üblichen Nachteile wie beim Nicht-Benutzen der Initialisierungsliste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881724</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 12 Apr 2010 17:58:48 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 18:05:37 GMT]]></title><description><![CDATA[<p>Naja, ich habe irgendwo mal gelesen, dass die Member in die Reihenfolge initialisiert werden in der sie in der Klassendefinition stehen und NICHT in der Reihenfolge der Initialisierungsliste (stimmt das?).</p>
<p>Irgendwie dachte ich, dass es vielleicht Nachteile gibt, wenn man nur einen Teil der Member in der Initialisierungsliste initialisiert und den anderen Rest im Rumpf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881727</guid><dc:creator><![CDATA[DasWandelndeSchloss]]></dc:creator><pubDate>Mon, 12 Apr 2010 18:05:37 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 18:18:45 GMT]]></title><description><![CDATA[<p>DasWandelndeSchloss schrieb:</p>
<blockquote>
<p>Naja, ich habe irgendwo mal gelesen, dass die Member in die Reihenfolge initialisiert werden in der sie in der Klassendefinition stehen und NICHT in der Reihenfolge der Initialisierungsliste (stimmt das?).</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Irgendwie dachte ich, dass es vielleicht Nachteile gibt, wenn man nur einen Teil der Member in der Initialisierungsliste initialisiert und den anderen Rest im Rumpf.</p>
</blockquote>
<p>Ja, das gibt nämlich dann einen Nachteil, wenn Abhängigkeiten zwischen verschiedenen Membern bestehen (etwa bei besagter Rechnung). Besagter Nachteil ist, dass es dann nicht funktioniert <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="😉"
    /> . Ich war jetzt davon ausgegangen, dass dieser (eher seltene) Fall bei dir nicht vorliegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881733</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 12 Apr 2010 18:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 19:12:30 GMT]]></title><description><![CDATA[<p>Welche Vorteile hat die Initialisierungsliste noch,<br />
abgesehen von der &quot;Initialisierung&quot; statt einer &quot;Definition+Zuweisung&quot; ?</p>
<p>mfg dweb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881767</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 19:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 19:13:10 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Welche Vorteile hat die Initialisierungsliste noch,<br />
abgesehen von der &quot;Initialisierung&quot; statt einer &quot;Definition+Zuweisung&quot; ?</p>
</blockquote>
<p>Du kannst Konstanten initialisieren und Konstruktoren von Basisklassen aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881768</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Mon, 12 Apr 2010 19:13:10 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 19:16:09 GMT]]></title><description><![CDATA[<p>Janjan schrieb:</p>
<blockquote>
<p>Dweb schrieb:</p>
<blockquote>
<p>Welche Vorteile hat die Initialisierungsliste noch,<br />
abgesehen von der &quot;Initialisierung&quot; statt einer &quot;Definition+Zuweisung&quot; ?</p>
</blockquote>
<p>Du kannst Konstanten initialisieren und Konstruktoren von Basisklassen aufrufen.</p>
</blockquote>
<p>ohh joa Konstruktoraufruf der Basisklasse <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>
<p>hmm Initialisierung von Konstanten und Referencen hätte ich jetzt eher unter &quot;have-to&quot; eingeordnet als unter &quot;Vorteil&quot; xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881770</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 19:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 19:24:00 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>ohh joa Konstruktoraufruf der Basisklasse <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>
<p>hmm Initialisierung von Konstanten und Referencen hätte ich jetzt eher unter &quot;have-to&quot; eingeordnet als unter &quot;Vorteil&quot; xD</p>
</blockquote>
<p>Die Konstruktoren der Basisklasse kannst du auch nur in der Initialisierungsliste aufrufen. Also auch ein &quot;have-to&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881779</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Mon, 12 Apr 2010 19:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 19:32:23 GMT]]></title><description><![CDATA[<p><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="😃"
    /> kann ich dir net widersprechen^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881783</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Apr 2010 19:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Mon, 12 Apr 2010 20:09:09 GMT]]></title><description><![CDATA[<p>Dweb schrieb:</p>
<blockquote>
<p>Welche Vorteile hat die Initialisierungsliste noch,<br />
abgesehen von der &quot;Initialisierung&quot; statt einer &quot;Definition+Zuweisung&quot; ?</p>
</blockquote>
<p>Konsistenz. Alles in der Initialisierungsliste, dann brauchst du keine Sonderbehandlung für Dinge, die dort stehen <em>müssen</em> und hast keine Nachteile bei optionalen Dingen. Ausnahmen wie verzögerte Initialisierung gibts natürlich trotzdem. Aber als Grundsatz empfiehlt es sich, so viel wie möglich in der Konstruktor-Initialisierungsliste zu initialisieren.</p>
<p>Wofür die Initialisierungsliste zwingend notwendig ist:</p>
<ul>
<li><code>const</code> -qualifizierte Membervariablen</li>
<li>Referenzen</li>
<li>Member ohne Defaultkonstruktor</li>
<li>Member, die den Zuweisungsoperator nicht unterstützen</li>
<li>Basisklassen ohne Defaultkonstruktor</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1881807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881807</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 12 Apr 2010 20:09:09 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Tue, 13 Apr 2010 00:55:50 GMT]]></title><description><![CDATA[<blockquote>
<p>Member, die den Zuweisungsoperator nicht unterstützen</p>
</blockquote>
<p>Nope. Nicht im geringsten. Also nicht <em>zwingend</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881885</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 13 Apr 2010 00:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Tue, 13 Apr 2010 16:42:15 GMT]]></title><description><![CDATA[<p>Du hast Recht. Ich hätte ausdrücklich sagen sollen, dass ich mich auf den Vergleich von Zuweisungen im Konstruktorrumpf und Initialisierungen in der Initialisierungsliste beziehe.</p>
<p>Also &quot;zwingend&quot; im Sinne von &quot;funktioniert nicht mit späteren Zuweisungen&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882286</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Apr 2010 16:42:15 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Tue, 13 Apr 2010 17:27:01 GMT]]></title><description><![CDATA[<p>OK, wenn du explizit <em>Zuweisung</em> im Konstruktorrumpf schreibst, dann ja. <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>Ich dachte an Dinge wie CFile aus der MFC.</p>
<p>Kann default-konstruiert werden.<br />
Kann nicht zugewiesen werden.<br />
Kann dafür aber mit diversen Funktionen nachträglich &quot;geändert&quot; (bzw. allgmein verwendet) werden.</p>
<p>z.B. mit Open() ein File aufmachen etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882321</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 13 Apr 2010 17:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Tue, 13 Apr 2010 20:57:38 GMT]]></title><description><![CDATA[<p>Initialisierungslisten werden schnell unleserlich, daher versuche ich sie grundsätzlich zu vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882395</guid><dc:creator><![CDATA[einint]]></dc:creator><pubDate>Tue, 13 Apr 2010 20:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsliste im Ctor on Tue, 13 Apr 2010 21:11:05 GMT]]></title><description><![CDATA[<p>einint schrieb:</p>
<blockquote>
<p>Initialisierungslisten werden schnell unleserlich, daher versuche ich sie grundsätzlich zu vermeiden.</p>
</blockquote>
<p>Inwiefern ist</p>
<pre><code class="language-cpp">MyClass::MyClass(int newInt, double newDouble, const std::string&amp; newString)
: myInt(newInt)
, myDouble(newDouble)
, myString(newString)
{
}
</code></pre>
<p>unübersichtlicher als</p>
<pre><code class="language-cpp">MyClass::MyClass(int newInt, double newDouble, const std::string&amp; newString)
{
  myInt = newInt;
  myDouble = newDouble;
  myString = newString;
}
</code></pre>
<p>Und wie kann ich mir das vorstellen? Nimmst du die erwähnten Nachteile billigend in Kauf, nur der Syntax wegen?</p>
<p>Oder schlimmer, designst du Klassen sogar entsprechend? Also z.B. überall Defaultkonstruktoren bereitstellen, auch wenn diese unangebracht sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1882405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1882405</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Apr 2010 21:11:05 GMT</pubDate></item></channel></rss>