<?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 Initialisierung]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>Vor einiger Zeit habe ich die Möglichkeit von statischen Initialisierungsfunktionen über statische Variablen nachgeschlagen:</p>
<pre><code class="language-cpp">// SomeClass.h
class SomeClass {
public:
    SomeClass();
    ~SomeClass();
private:
    static bool initialize();
    static const bool INITIALIZED;
};
</code></pre>
<pre><code class="language-cpp">// SomeClass.cpp
const bool SomeClass::INITIALIZED(initialize());

SomeClass::SomeClass() {}
SomeClass::~SomeClass() {}

bool SomeClass::initialize() {
    // Do static stuff
    return true;
}
</code></pre>
<p>Bei dieser Methode kommen mir allerdings Bedenken, wenn meine initialize()-Methode auf statischen Inhalt von anderen Klassen zugreifen muss. Wie kann ich z.B. sicher sein, dass eine öffentliche, statische map in einer anderen Klasse zum Initialisierungszeitpunkt dieser Klasse bereits initialisiert bzw. konstruiert ist ist?</p>
<p>Danke für einen kurzen Tipp und beste Grüsse<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257747/statische-initialisierung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 23:17:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257747.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Jan 2010 21:17:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to statische Initialisierung on Sat, 02 Jan 2010 21:17:56 GMT]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>Vor einiger Zeit habe ich die Möglichkeit von statischen Initialisierungsfunktionen über statische Variablen nachgeschlagen:</p>
<pre><code class="language-cpp">// SomeClass.h
class SomeClass {
public:
    SomeClass();
    ~SomeClass();
private:
    static bool initialize();
    static const bool INITIALIZED;
};
</code></pre>
<pre><code class="language-cpp">// SomeClass.cpp
const bool SomeClass::INITIALIZED(initialize());

SomeClass::SomeClass() {}
SomeClass::~SomeClass() {}

bool SomeClass::initialize() {
    // Do static stuff
    return true;
}
</code></pre>
<p>Bei dieser Methode kommen mir allerdings Bedenken, wenn meine initialize()-Methode auf statischen Inhalt von anderen Klassen zugreifen muss. Wie kann ich z.B. sicher sein, dass eine öffentliche, statische map in einer anderen Klasse zum Initialisierungszeitpunkt dieser Klasse bereits initialisiert bzw. konstruiert ist ist?</p>
<p>Danke für einen kurzen Tipp und beste Grüsse<br />
Kessi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831118</guid><dc:creator><![CDATA[Kessi MC]]></dc:creator><pubDate>Sat, 02 Jan 2010 21:17:56 GMT</pubDate></item><item><title><![CDATA[Reply to statische Initialisierung on Sat, 02 Jan 2010 21:26:55 GMT]]></title><description><![CDATA[<p>Dazu gibts eine relativ einfache Möglichkeit, allerdings kann die Map dann kein statischer Member der Klasse mehr sein.</p>
<pre><code class="language-cpp">class MyClass
{
    public:
        static std::map&lt;X,Y&gt;&amp; GetMap()
        {
            static std::map&lt;X,Y&gt; Map;
            return Map;
        }
};
</code></pre>
<p>Hier ist garantiert, dass die Variable <code>Map</code> beim ersten Aufruf der Methode (und nur dann) initialisiert wird. Dadurch hast du den zusätzlichen Vorteil, dass keine Konstruktion durchgeführt wird, wenn du die Funktion nie aufrufst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831122</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 02 Jan 2010 21:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to statische Initialisierung on Sat, 02 Jan 2010 21:57:08 GMT]]></title><description><![CDATA[<p>Perfekt, das löst mein Problem, danke <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>Das fühlt sich ja fast schon wie ein sprach-inhärentes Singleton-Pattern an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831149</guid><dc:creator><![CDATA[Kessi MC]]></dc:creator><pubDate>Sat, 02 Jan 2010 21:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to statische Initialisierung on Sat, 02 Jan 2010 22:21:08 GMT]]></title><description><![CDATA[<p>Ja, diese Technik ist recht praktisch für das Singleton-Pattern. Das Meyers-Singleton (eine der bekanntesten Implementierungen, benannt nach Scott Meyers) funktioniert auf diese Weise.</p>
<p>Ein anderes Problem stellt sich jedoch bei der Zerstörung, genauer gesagt, wenn beim Aufräumen Abhängigkeiten zwischen verschiedenen Klassen bestehen. Hier kommt das Meyers-Singleton relativ schnell an seine Grenzen. Andrei Alexandrescu zeigt in seinem Buch &quot;Modern C++ Design&quot; einige Implementierungen auf, die auch dieses Problem bewältigen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1831155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1831155</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 02 Jan 2010 22:21:08 GMT</pubDate></item></channel></rss>