<?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[Ist die Init Reihenfolge der Klassen festgelegt?]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe eine Hauptklasse die eine paar static Member hat und diese per static Getter anbietet. Kann ich diese Getter nun zur Initialisierung von static Variablen in anderen Klassen nehmen? Scheinbar scheint es zu funktionieren. Kann ich mich darauf verlassen?</p>
<p>Wann werden eigentlich die static Variablen initialiisert? Erst wenn die Klasse das erste mal benötigt wird oder gleich am Start?</p>
<p>Vielen Dank</p>
<p>Luigi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256260/ist-die-init-reihenfolge-der-klassen-festgelegt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 16:20:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256260.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Dec 2009 12:04:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 12:04:49 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich habe eine Hauptklasse die eine paar static Member hat und diese per static Getter anbietet. Kann ich diese Getter nun zur Initialisierung von static Variablen in anderen Klassen nehmen? Scheinbar scheint es zu funktionieren. Kann ich mich darauf verlassen?</p>
<p>Wann werden eigentlich die static Variablen initialiisert? Erst wenn die Klasse das erste mal benötigt wird oder gleich am Start?</p>
<p>Vielen Dank</p>
<p>Luigi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820523</guid><dc:creator><![CDATA[Luigi_X]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:04:49 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 12:15:51 GMT]]></title><description><![CDATA[<p>Ich will nicht so viele Threads aufmachen. Noch ne Frage:</p>
<pre><code class="language-cpp">while (1) {
 int i = MyFunc();
 Dosomething();
}
</code></pre>
<p>Wird hier das i immer wieder neu auf dem Stack angelegt oder kann ich das so schreiben? -&gt;Performace, insbesondere wenn anstatt des int eine Klasse genommen wird. Mich interessiert der Standard. Die Kompiler mögen da vielleicht optimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820531</guid><dc:creator><![CDATA[Luigi_X]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 12:29:21 GMT]]></title><description><![CDATA[<p>Wenn du die Erzeugung deiner statischen Variable in einer Funktion kapselst, erfolgt die Erzeugung beim erstmaligen Aufruf.<br />
Globale Objekte werden vor dem Eintritt in die main() initialisiert.<br />
Da static-Variablen nicht an Klasseninstanzen (aka Objekte) gebunden sind, erfolgt die Erstellung mit dem ersten Objekt.</p>
<p>Zu deiner zweiten Frage:<br />
Sobald das &quot;i&quot; den Scope verlässt wird es zerstört. Also nach jedem Schleifendurchlauf.<br />
Ob Compilerhersteller da optimieren kann ich nicht sagen.<br />
Bei einem int ist das nicht so schlimm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820541</guid><dc:creator><![CDATA[SuperMario_Y]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:29:21 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 12:34:30 GMT]]></title><description><![CDATA[<p>SuperMario_Y schrieb:</p>
<blockquote>
<p>Ob Compilerhersteller da optimieren kann ich nicht sagen.<br />
Bei einem int ist das nicht so schlimm.</p>
</blockquote>
<p>Das ist eine der primitivsten Compileroptimierungen. Über soetwas sollte man sich heutzutage als Programmierer keine Gedanken mehr machen müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820545</guid><dc:creator><![CDATA[siecpp]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:34:30 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 12:34:51 GMT]]></title><description><![CDATA[<ol>
<li>Es gibt die Regel &quot;Eine Frage, ein Thread&quot;. Wenn du mehrere Fragen haben solltest mach bitte einen eigenen Thread für jede Frage auf.</li>
</ol>
<p>Statische Variablen werden vor dem Aufruf von main() initialisiert, also zu einem Zeitpunkt, wo du noch gar keine Kontrolle über dein Programm hast. Demnach ist ein Zugriff immer sicher (es sei denn du hast zwei statische Objekte, die gegenseitig aufeinander zugreifen, da spielt die Reihenfolge der Initialisierung eine Rolle, das Problem heisst static initialization order fiasco).</p>
<ol start="2">
<li>Ist total latte. Der Prozessor verschiebt den Stackpointer um 4 Byte, wenn i innerhalb des Schleifenkörpers deklariert wird. Zeittechnisch merkt die CPU das nichteinmal, du wirst mit keinem Messwerkzeug der Welt einen Unterschied feststellen. Ich bleibe beim Prinzip, Variablen dann anzulegen, wenn sie benötigt werden.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1820546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820546</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 12:44:35 GMT]]></title><description><![CDATA[<p>SuperMario_Y schrieb:</p>
<blockquote>
<p>Wenn du die Erzeugung deiner statischen Variable in einer Funktion kapselst, erfolgt die Erzeugung beim erstmaligen Aufruf.</p>
</blockquote>
<p>Das ist mir klar.</p>
<p>SuperMario_Y schrieb:</p>
<blockquote>
<p>Globale Objekte werden vor dem Eintritt in die main() initialisiert.</p>
</blockquote>
<p>Du meinst public static Member Variablen mit globalen V? Ich habe eine private static Variable und einen Public Getter. Der Getter ist global zu erreichen. Dann muß auch die Variable vor Eintritt in main initialisiert werden? Sonst geht es ja nicht.</p>
<p>SuperMario_Y schrieb:</p>
<blockquote>
<p>Da static-Variablen nicht an Klasseninstanzen (aka Objekte) gebunden sind, erfolgt die Erstellung mit dem ersten Objekt.</p>
</blockquote>
<p>Aber ich kann doch auf die static Variable von einem static Getter zugreifen? Also müssen die Var schon vor dem ersten Objekt init werden.</p>
<p>Mir geht es darum ob der C++ Standard vorschreibt das die Compiler Herrsteller dort eine Algo anwenden der dafür sorgt das die static Variablen in der richtigen Reihenfolge init werden.</p>
<p>Konkretes Beispiel: Ich habe ein globale Klasse Settings. Dort sind alle Einstellungen in static Variablen gespeichert. Andere Klassen haben auch static Variablen nd holen sich mit static Gettern der Form GetSetttingX() aus der Settingsklasse die Einstellungen. Es wäre schlecht wenn ein anderer Kompiler die init Reihenfolge vertauscht und der erste Aufruf von GetSetttingX() irgendeinen uninitialisierten Mist zurück gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820550</guid><dc:creator><![CDATA[Luigi_X]]></dc:creator><pubDate>Thu, 10 Dec 2009 12:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 13:04:02 GMT]]></title><description><![CDATA[<p>Ein Test ist so schwer?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

class Test
{
    static Test s_test;
public:
    Test()
    {
        cout &lt;&lt; &quot;Test Constructor&quot; &lt;&lt; endl;
    }
    static Test&amp; test1()
    {
        cout &lt;&lt; &quot;test1()&quot; &lt;&lt; endl;
        static Test t;
        cout &lt;&lt; &quot;====&quot; &lt;&lt; endl;
        return t;
    }
    static Test&amp; test2()
    {
        cout &lt;&lt; &quot;test2()&quot; &lt;&lt; endl;
        cout &lt;&lt; &quot;====&quot; &lt;&lt; endl;
        return s_test;
    }
};

Test Test::s_test = Test();

int main()
{
    cout &lt;&lt; &quot;Beginne main()&quot; &lt;&lt; endl;
    Test::test1();
    Test::test2();
    Test::test1();
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Test Constructor
Beginne main()
test1()
Test Constructor
====
test2()
====
test1()
====
</code></pre>
<p>Schlüsse über Initialisierungszeitpunkt darfst du selber anstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820562</guid><dc:creator><![CDATA[SuperMario_Y]]></dc:creator><pubDate>Thu, 10 Dec 2009 13:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to Ist die Init Reihenfolge der Klassen festgelegt? on Thu, 10 Dec 2009 15:36:30 GMT]]></title><description><![CDATA[<p>Lies hier mal die Abschnitte 10.10 bis 10.16:<br />
<a href="http://parashift.com/c++-faq-lite/" rel="nofollow">Parashift C++ FAQ</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1820728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1820728</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 10 Dec 2009 15:36:30 GMT</pubDate></item></channel></rss>