<?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[statische klassenmember die nicht elementaren datentyp hat]]></title><description><![CDATA[<p>hi,</p>
<p>haette folgende frage hoffe ihr koennt helfen:</p>
<p>header file:</p>
<pre><code>class B
{
  public:
   B(short val=5):m_val(val){}
   SetVal(short val){m_val=val;}
  private:
   short m_val;
};

class A
{
  public:
   A();
  private:
    static B s_bObj;
}
</code></pre>
<p>cpp-file:</p>
<pre><code>B A::s_bObj;
A::()
{
  s_bObj.SetVal(3);
}
</code></pre>
<p>Meine Frage:<br />
Wann genau wird das statische Objekt s_bObj instanziiert!?!?<br />
Ich haette gedacht dass das noch vor der laufzeit passiert .. geht doch aber nicht da konstruktor da ueberhaupt nicht aufgerufen haette werden koennen <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 />
Etwas Background-Tips hierzu waere schoen. Forum hat leider keine topics gehabt, die dieses beinhalteten (jedenfalls nicht die die ich gefunden habe)<br />
danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222347/statische-klassenmember-die-nicht-elementaren-datentyp-hat</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 04:09:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222347.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Sep 2008 09:28:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 09:28:30 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>haette folgende frage hoffe ihr koennt helfen:</p>
<p>header file:</p>
<pre><code>class B
{
  public:
   B(short val=5):m_val(val){}
   SetVal(short val){m_val=val;}
  private:
   short m_val;
};

class A
{
  public:
   A();
  private:
    static B s_bObj;
}
</code></pre>
<p>cpp-file:</p>
<pre><code>B A::s_bObj;
A::()
{
  s_bObj.SetVal(3);
}
</code></pre>
<p>Meine Frage:<br />
Wann genau wird das statische Objekt s_bObj instanziiert!?!?<br />
Ich haette gedacht dass das noch vor der laufzeit passiert .. geht doch aber nicht da konstruktor da ueberhaupt nicht aufgerufen haette werden koennen <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 />
Etwas Background-Tips hierzu waere schoen. Forum hat leider keine topics gehabt, die dieses beinhalteten (jedenfalls nicht die die ich gefunden habe)<br />
danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580160</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Thu, 11 Sep 2008 09:28:30 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 09:33:57 GMT]]></title><description><![CDATA[<p>Vor Ausführung des eigentlichen Programms (also vor Aufruf der main-Funktion).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580164</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Sep 2008 09:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 09:35:52 GMT]]></title><description><![CDATA[<p>pepe75 schrieb:</p>
<blockquote>
<p>Ich haette gedacht dass das noch vor der laufzeit passiert ..</p>
</blockquote>
<p>Vor der Laufzeit wird nichts angelegt, auch statische Elemente werden erst zur Laufzeit, aber vor dem ersten Zugriff initialisiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580165</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 11 Sep 2008 09:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 09:39:18 GMT]]></title><description><![CDATA[<p>hmmm.<br />
heisst das, dass die erste zeile in der cpp-datei</p>
<pre><code>B A::s_bObj;
</code></pre>
<p>schon bereits den default konstruktor aufruft?</p>
<p>man erzaehlt mir naemlich gerade, dass man nicht immer davon ausgehen kann, dass s_bObj bereits durch den Default-Konstruktor gelaufen ist (siehe zeile oben) beim zugriff auf s_bObj im Konstruktor von A !?!? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580169</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Thu, 11 Sep 2008 09:39:18 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 09:40:09 GMT]]></title><description><![CDATA[<p>&quot;man erzaehlt mir naemlich gerade&quot;<br />
Dann erzählt jemand was falsches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580171</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Sep 2008 09:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 09:43:20 GMT]]></title><description><![CDATA[<p>Es kommt allerdings darauf an, wo und wie das A-Objekt erzeugt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580173</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 11 Sep 2008 09:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 10:29:06 GMT]]></title><description><![CDATA[<p>also genauer geht es eigentlich um einen<br />
boost::mutex (aus der boost C++ lib)</p>
<p>d.h. das obige s_bObj ist bei mir eigentlich ein boost::mutex (wieder statisch).</p>
<p>wenn ich nun im Konstruktor von A auf den mutex zugreifen moechte, woher weiss ich dass dieser schon ordentlich konstruiert wurde !?!?</p>
<p>(wobei die A-Instanz irgendwo in ner normalen z.B. C-Klassenmethode erzeugt wird)</p>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580191</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Thu, 11 Sep 2008 10:29:06 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 10:47:08 GMT]]></title><description><![CDATA[<p>Die Reihenfolge der Initialisierung ist meines Wissens nicht definiert? Oder?<br />
Das heißt, wenn ich aus ctor von A eine statische Instanz von B verwende kann das schief gehen, weil B evtl. vorher nicht initialisiert wurde.<br />
Richtig?<br />
Weiß nur das ich schon viel Probleme mit statischen Objekten hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580204</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Thu, 11 Sep 2008 10:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to statische klassenmember die nicht elementaren datentyp hat on Thu, 11 Sep 2008 11:05:32 GMT]]></title><description><![CDATA[<p>Problematisch ist sowas eigentlich nur, wenn man statische Objekte in zwei unterschiedlichen Übersetzungseinheiten hat, und das statische Objekt in einer Übersetzungseinheit von dem statischen Objekt der anderen Übersetzungseinheit abhängt. Dann kann es passieren, dass ersteres initialisert wird, bevor zweiteres initialisert wird, und dann knallt es.<br />
Gegen sowas kann man das &quot;Construct On First Use&quot;-Idiom benutzen, das in etwa so aussieht:</p>
<pre><code class="language-cpp">someObjekt&amp; getInstance()
{
   static someObjekt instance;
   return instance;
}
</code></pre>
<p>Der Zugriff erfolgt dann logischweise über <code>getInstance()</code> und es wird so sichergestellt, dass statische Objekt bei seiner ersten Benutzung auf jeden Fall initialisiert wird.</p>
<p><a href="http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12" rel="nofollow">Hier</a> und <a href="http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.13" rel="nofollow">hier</a> gibts noch ein paar Beispiele dazu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580217</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:05:32 GMT</pubDate></item></channel></rss>