<?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[allg. statische variablen + logger klasse]]></title><description><![CDATA[<p>ok folgendes, ich hab mehrere singleton klassen in meinem projekt</p>
<p>von dem was ich weiss ist es so dass statische variablen (in dem fall die instanzen der singleton klasse welche member der klassen selbst sind) nach &quot;c++ standard&quot; alle erst dann initialisiert werden sollten wenn sie zum ersten mal benutzt werden (bin mir aber nicht sicher mit der aussage)</p>
<p>außerdem hab ich auch hier und da gelesen dass die initialisierungsreihenfolge bei statischen variablen keiner regel unterliegt, sie können also alle durcheinander initialisiert werden und auch alle einfach direkt beim start und nicht erst wenn sie benötigt werden (hängt schätze ich vom compiler ab)</p>
<p>ich habe also eine log klasse welche ebenfalls ein singleton ist</p>
<ol>
<li>ist es sicher die log klasse bereits zum loggen zu verwenden innerhalb der konstruktoren von den anderen singleton klassen</li>
</ol>
<p>also darf ich davon ausgehen dass wenn der kompiler sieht ich benutze die statische logger instanz in der statischen SomeClass instanz und logger aber noch nicht initialisiert worden ist, dass er mir das ding zu dem zeitpunkt initialisiert?</p>
<p>oder sollte man eher davon absehen den logger in diesen konstruktoren zu verwenden</p>
<ol start="2">
<li>zu der log klasse selbst</li>
</ol>
<p>ich bin ziemlich unentschieden ob ich es auf diese art machen soll:<br />
a)</p>
<pre><code class="language-cpp">#define DO_LOG
#ifdef DO_LOG
#define LOG(x) Log::Instance()-&gt;Log(x)
#else
#define LOG(x) //dont log
#endif
</code></pre>
<p>also die &quot;klassische&quot; (? -.-) art über ein macro</p>
<p>oder<br />
b)</p>
<pre><code class="language-cpp">class Log
{
    inline void Log(const char *string)
    {
#ifdef DO_LOG
        logfile &lt;&lt; string;
#endif        
    }
};
</code></pre>
<p>ich meine... im grunde müsste es ja genau dasselbe sein, die inline methode wird halt sowieso inline ersetzt (bzw sollte, wenns der compiler nicht macht ist es auch kein drama) und wenn DO_LOG nicht gesetzt ist steht nix da<br />
(die methode um sich die instanz der log klasse zu holen ist halt auch inline)</p>
<p>genauso wie bei der makro variante</p>
<p>ich tendiere ehrlich gesagt zu b) weil ich es für die hübschere lösung halte</p>
<p>aber wäre generell daran interessiert ob jemand gute gründe für oder gegen eine der beiden varianten nennen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208217/allg-statische-variablen-logger-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 15:45:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208217.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Mar 2008 14:04:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to allg. statische variablen + logger klasse on Sun, 16 Mar 2008 14:05:31 GMT]]></title><description><![CDATA[<p>ok folgendes, ich hab mehrere singleton klassen in meinem projekt</p>
<p>von dem was ich weiss ist es so dass statische variablen (in dem fall die instanzen der singleton klasse welche member der klassen selbst sind) nach &quot;c++ standard&quot; alle erst dann initialisiert werden sollten wenn sie zum ersten mal benutzt werden (bin mir aber nicht sicher mit der aussage)</p>
<p>außerdem hab ich auch hier und da gelesen dass die initialisierungsreihenfolge bei statischen variablen keiner regel unterliegt, sie können also alle durcheinander initialisiert werden und auch alle einfach direkt beim start und nicht erst wenn sie benötigt werden (hängt schätze ich vom compiler ab)</p>
<p>ich habe also eine log klasse welche ebenfalls ein singleton ist</p>
<ol>
<li>ist es sicher die log klasse bereits zum loggen zu verwenden innerhalb der konstruktoren von den anderen singleton klassen</li>
</ol>
<p>also darf ich davon ausgehen dass wenn der kompiler sieht ich benutze die statische logger instanz in der statischen SomeClass instanz und logger aber noch nicht initialisiert worden ist, dass er mir das ding zu dem zeitpunkt initialisiert?</p>
<p>oder sollte man eher davon absehen den logger in diesen konstruktoren zu verwenden</p>
<ol start="2">
<li>zu der log klasse selbst</li>
</ol>
<p>ich bin ziemlich unentschieden ob ich es auf diese art machen soll:<br />
a)</p>
<pre><code class="language-cpp">#define DO_LOG
#ifdef DO_LOG
#define LOG(x) Log::Instance()-&gt;Log(x)
#else
#define LOG(x) //dont log
#endif
</code></pre>
<p>also die &quot;klassische&quot; (? -.-) art über ein macro</p>
<p>oder<br />
b)</p>
<pre><code class="language-cpp">class Log
{
    inline void Log(const char *string)
    {
#ifdef DO_LOG
        logfile &lt;&lt; string;
#endif        
    }
};
</code></pre>
<p>ich meine... im grunde müsste es ja genau dasselbe sein, die inline methode wird halt sowieso inline ersetzt (bzw sollte, wenns der compiler nicht macht ist es auch kein drama) und wenn DO_LOG nicht gesetzt ist steht nix da<br />
(die methode um sich die instanz der log klasse zu holen ist halt auch inline)</p>
<p>genauso wie bei der makro variante</p>
<p>ich tendiere ehrlich gesagt zu b) weil ich es für die hübschere lösung halte</p>
<p>aber wäre generell daran interessiert ob jemand gute gründe für oder gegen eine der beiden varianten nennen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475239</guid><dc:creator><![CDATA[Vevusio]]></dc:creator><pubDate>Sun, 16 Mar 2008 14:05:31 GMT</pubDate></item><item><title><![CDATA[Reply to allg. statische variablen + logger klasse on Sun, 16 Mar 2008 14:26:38 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Log(GetFreeDiskSpace() + &quot; Mem &quot; + GetFreeMem());
</code></pre>
<p>bei b wrid der innere teil ausgeführt bei a nicht</p>
<p><em>Kameras in jeden Raum.<br />
Wer die Kloschüssel trifft hat nichts zu verbergen.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475246</guid><dc:creator><![CDATA[berg]]></dc:creator><pubDate>Sun, 16 Mar 2008 14:26:38 GMT</pubDate></item></channel></rss>