<?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[Konstruktor von einer static Klasse wird nicht aufgerufen]]></title><description><![CDATA[<p>Folgendes Szenario:</p>
<pre><code class="language-cpp">class NochEinContainer
{
    public: 
        NochEinContainer() 
        {
            cout&lt;&lt;this&lt;&lt;endl;
            exit(0);            
        }
};

class Container
{
    public: 
        Container()
        {            

        }
        static NochEinContainer cont;
};
</code></pre>
<p>Der Konstruktor von NochEinContainer wird nie aufgerufen, warum? Ist das static-Attribut cont von Container jetzt gültig?</p>
<p>Wie kann ich den Konstruktor aufrufen lassen, ohne das ich einen Pointer daraus mache und ein Objekt per new anlege?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/150647/konstruktor-von-einer-static-klasse-wird-nicht-aufgerufen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 20:34:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/150647.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Jun 2006 06:47:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor von einer static Klasse wird nicht aufgerufen on Mon, 19 Jun 2006 06:47:07 GMT]]></title><description><![CDATA[<p>Folgendes Szenario:</p>
<pre><code class="language-cpp">class NochEinContainer
{
    public: 
        NochEinContainer() 
        {
            cout&lt;&lt;this&lt;&lt;endl;
            exit(0);            
        }
};

class Container
{
    public: 
        Container()
        {            

        }
        static NochEinContainer cont;
};
</code></pre>
<p>Der Konstruktor von NochEinContainer wird nie aufgerufen, warum? Ist das static-Attribut cont von Container jetzt gültig?</p>
<p>Wie kann ich den Konstruktor aufrufen lassen, ohne das ich einen Pointer daraus mache und ein Objekt per new anlege?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080365</guid><dc:creator><![CDATA[Delryn]]></dc:creator><pubDate>Mon, 19 Jun 2006 06:47:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von einer static Klasse wird nicht aufgerufen on Mon, 19 Jun 2006 06:52:15 GMT]]></title><description><![CDATA[<p>Du mußt auch irgendwo dieses Objekt anlegen, damit du es wiederfindest (brauchst du sowieso, wenn du etwas damit machen willst). Dazu packst du am besten in die Quelldatei von &quot;Container&quot; die Zeile:</p>
<pre><code class="language-cpp">NochEinContainer Container::cont/*(...)*/;
</code></pre>
<p>(wenn du willst, kannst du an dieser Stelle zusätzliche Ctor-Parameter angeben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080367</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 19 Jun 2006 06:52:15 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von einer static Klasse wird nicht aufgerufen on Mon, 19 Jun 2006 06:58:11 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Du mußt auch irgendwo dieses Objekt anlegen, damit du es wiederfindest (brauchst du sowieso, wenn du etwas damit machen willst). Dazu packst du am besten in die Quelldatei von &quot;Container&quot; die Zeile:</p>
<pre><code class="language-cpp">NochEinContainer Container::cont/*(...)*/;
</code></pre>
<p>(wenn du willst, kannst du an dieser Stelle zusätzliche Ctor-Parameter angeben)</p>
</blockquote>
<p>Der g++ hat dies aber nicht bemängelt, ist das &quot;normal&quot;?<br />
Nur wenn ich einen static pointer habe gibt's halt die Fehlermeldung, dass ich ihn mit ein Objekt initialisieren muss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080369</guid><dc:creator><![CDATA[Delryn]]></dc:creator><pubDate>Mon, 19 Jun 2006 06:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von einer static Klasse wird nicht aufgerufen on Mon, 19 Jun 2006 10:38:15 GMT]]></title><description><![CDATA[<p>Frage: Wäre das Verhalten des obigen Codes nicht ohnehin undefiniert? Der Konstruktor von NochEinContainer wird vor der Ausführung von main aufgerufen. Gibt es irgendeine Garantie, daß das darin verwendete cout Objekt zu diesem Zeitpunkt bereits konstruiert worden ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080515</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Mon, 19 Jun 2006 10:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor von einer static Klasse wird nicht aufgerufen on Mon, 19 Jun 2006 12:13:30 GMT]]></title><description><![CDATA[<p>Delryn schrieb:</p>
<blockquote>
<p>Der g++ hat dies aber nicht bemängelt, ist das &quot;normal&quot;?</p>
</blockquote>
<p>Den Compiler interessiert das sowieso nicht. Und der Linker wirft nur dann eine Fehlermeldung, wenn er ein Symbol nicht auflösen kann. Da dein static Member aber nirgendwo verwendet wird, hat der Linker gar keinen Grund irgendetwas aufzulösen.</p>
<p>Delryn schrieb:</p>
<blockquote>
<p>Nur wenn ich einen static pointer habe gibt's halt die Fehlermeldung, dass ich ihn mit ein Objekt initialisieren muss</p>
</blockquote>
<p>Dann poste mal den konkreten Code. Ob der static Member ein Zeiger oder kein Zeiger ist, spielt hier keine Rolle. Das Verhalten ist das Gleiche.</p>
<p>edit:</p>
<p>Z2 schrieb:</p>
<blockquote>
<p>Frage: Wäre das Verhalten des obigen Codes nicht ohnehin undefiniert? Der Konstruktor von NochEinContainer wird vor der Ausführung von main aufgerufen. Gibt es irgendeine Garantie, daß das darin verwendete cout Objekt zu diesem Zeitpunkt bereits konstruiert worden ist?</p>
</blockquote>
<p>Das Verhalten ist durchaus definiert. Das im Detail zu erklären, würde aber jetzt zu weit führen. Vllt. findest du mehr Informationen unter dem Stichwort &quot;nifty initialization&quot;. Vom Prinzip her funktioniert das wie folgt:</p>
<pre><code class="language-cpp">class iostream
{
public:
    static ostream&amp; cout_instance()
    {
        static ostream cout;
        return cout;
    }
};

ostream&amp; cout = iostream::cout_instance();
</code></pre>
<p>Egal wann du cout zum ersten mal benutzt, es ist damit sichergestellt, dass das cout Objekt vorher auf jeden Fall erzeugt wird. Das ganze lässt sich natürlich auch dynamisch handeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1080566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1080566</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Mon, 19 Jun 2006 12:13:30 GMT</pubDate></item></channel></rss>