<?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[Buch: SDL Game Development + Singleton Pattern]]></title><description><![CDATA[<p>Hallo,</p>
<p>In dem Buch <a href="https://www.amazon.de/SDL-Game-Development-Black-White/dp/1849696829/ref=sr_1_1?ie=UTF8&amp;qid=1469797649&amp;sr=8-1&amp;keywords=sdl+game+development" rel="nofollow">SDL Game Development</a> wird unter anderem eine kleine Game Engine gebaut, mit Texture Manager, Game States, etc. Doch der Autor benutzt wirklich für jeden Kram das Singleton Pattern. Da ich natürlich von vorne rein wusste, dass das Singleton Pattern einen schlechten Namen hat, habe ich meine eigene Game Engine ohne das Pattern geschrieben. Was ich nun aber bemerkt habe, ist, dass mein Code viel aufgeblähter ist, als seins, mit Singleton. Bei meinem Code muss man viel mehr Sachen an Funktionen weiter übergeben (manchmal auch ziemlich viele Sachen). Und ich wollte fragen: Wann genau macht ein Singleton Pattern eigentlich Sinn? Meine Interpretation dazu: Also eigentlich ist ein Singleton Pattern ja nicht gut, weil es wie eine globale Variable funktioniert, richtig? Andererseits kann man da ein Singleton benutzen, wo man wirklich weiß, dass es logischerweise nur eine Instanz einer bestimmten Klasse geben kann. Zum Beispiel Texture Manager, oder Game State.</p>
<p>Wie würdet ihr das machen? Auf das Singleton Pattern verzichten und etwas mehr Code schreiben oder das Singleton Pattern benutzen und gechillt auf alles von überall zugreifen können?</p>
<p>Hierzu noch eine Singleton-Klasse, so wie ich sie implementieren würde:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;

template&lt;typename T&gt;
class singleton{
public:
    template&lt;typename... Args&gt;
    static T&amp; instance(Args&amp;&amp;... arguments){
        if(!inst)
            inst.reset(new T{std::forward&lt;Args&gt;(arguments)...});

        return *inst;
    }

    static void destroy(){
        inst.reset();
    }

protected:
    singleton() = default;

private:
    static std::unique_ptr&lt;T&gt; inst;
};

template&lt;typename T&gt;
std::unique_ptr&lt;T&gt; singleton&lt;T&gt;::inst = nullptr;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/339045/buch-sdl-game-development-singleton-pattern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 13:09:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339045.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Jul 2016 13:20:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Buch: SDL Game Development + Singleton Pattern on Fri, 29 Jul 2016 13:20:53 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>In dem Buch <a href="https://www.amazon.de/SDL-Game-Development-Black-White/dp/1849696829/ref=sr_1_1?ie=UTF8&amp;qid=1469797649&amp;sr=8-1&amp;keywords=sdl+game+development" rel="nofollow">SDL Game Development</a> wird unter anderem eine kleine Game Engine gebaut, mit Texture Manager, Game States, etc. Doch der Autor benutzt wirklich für jeden Kram das Singleton Pattern. Da ich natürlich von vorne rein wusste, dass das Singleton Pattern einen schlechten Namen hat, habe ich meine eigene Game Engine ohne das Pattern geschrieben. Was ich nun aber bemerkt habe, ist, dass mein Code viel aufgeblähter ist, als seins, mit Singleton. Bei meinem Code muss man viel mehr Sachen an Funktionen weiter übergeben (manchmal auch ziemlich viele Sachen). Und ich wollte fragen: Wann genau macht ein Singleton Pattern eigentlich Sinn? Meine Interpretation dazu: Also eigentlich ist ein Singleton Pattern ja nicht gut, weil es wie eine globale Variable funktioniert, richtig? Andererseits kann man da ein Singleton benutzen, wo man wirklich weiß, dass es logischerweise nur eine Instanz einer bestimmten Klasse geben kann. Zum Beispiel Texture Manager, oder Game State.</p>
<p>Wie würdet ihr das machen? Auf das Singleton Pattern verzichten und etwas mehr Code schreiben oder das Singleton Pattern benutzen und gechillt auf alles von überall zugreifen können?</p>
<p>Hierzu noch eine Singleton-Klasse, so wie ich sie implementieren würde:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;

template&lt;typename T&gt;
class singleton{
public:
    template&lt;typename... Args&gt;
    static T&amp; instance(Args&amp;&amp;... arguments){
        if(!inst)
            inst.reset(new T{std::forward&lt;Args&gt;(arguments)...});

        return *inst;
    }

    static void destroy(){
        inst.reset();
    }

protected:
    singleton() = default;

private:
    static std::unique_ptr&lt;T&gt; inst;
};

template&lt;typename T&gt;
std::unique_ptr&lt;T&gt; singleton&lt;T&gt;::inst = nullptr;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503935</guid><dc:creator><![CDATA[chilln]]></dc:creator><pubDate>Fri, 29 Jul 2016 13:20:53 GMT</pubDate></item><item><title><![CDATA[Reply to Buch: SDL Game Development + Singleton Pattern on Fri, 29 Jul 2016 13:56:25 GMT]]></title><description><![CDATA[<p>Du musst so viele Sachen durch die Gegend reichen, weil du noch nicht sehr gut darin bist Code zu strukturieren und Abstraktionen anzuwenden. Das Singleton kehrt diese Probleme unter den Teppich, hilft dir aber nicht ein besserer Programmierer zu werden. Wenn man etwas Erfahrung hat und sauber arbeitet, braucht man kein Singleton und will es auch gar nicht.</p>
<p>Globale Variablen führen dazu, dass Funktionen auf Daten kreuz und quer im Programm zugreifen. Das macht Unit Tests unmöglich, Debugging viel schwieriger und erhöht die Angriffsfläche für viele Arten von Bugs: Race Conditions, Inkonsistenzen, versehentliches Überschreiben von Daten.</p>
<p>Die Nutzer von Singletons sehen nur den vorübergehenden Vorteil, dass sie sich scheinbar weniger Gedanken um die Programmstruktur machen müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503942</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 29 Jul 2016 13:56:25 GMT</pubDate></item><item><title><![CDATA[Reply to Buch: SDL Game Development + Singleton Pattern on Fri, 29 Jul 2016 14:13:59 GMT]]></title><description><![CDATA[<p>Ok. Dann versuch ich mal für jeden kleinen F*ck eine Klasse zu schreiben. Naja, was ich auch getan habe. Ich rede von vier Parametern :D. Gut, dann behalt ich mal fest, dass Singletons dazu führen, dass der Code schwieriger zu debuggen ist und man nicht überall auf alles zugreifen können soll.</p>
<p>Ich versuche jetzt die Game Engine nochmal zu schreiben, vielleicht kommt dann ja noch etwas besseres dabei raus.</p>
<p>Danke für die ausführliche Antwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503946</guid><dc:creator><![CDATA[chilln]]></dc:creator><pubDate>Fri, 29 Jul 2016 14:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to Buch: SDL Game Development + Singleton Pattern on Fri, 29 Jul 2016 19:30:35 GMT]]></title><description><![CDATA[<p>In der Webentwicklung wird häufig das Prinzip der Depedency Injection (DI) genutzt, vielleicht wäre das ja was für dich, im Prinzip ist es eine Bündlung aller Dinge die du weiterreichst in ein Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503983</guid><dc:creator><![CDATA[Bengo]]></dc:creator><pubDate>Fri, 29 Jul 2016 19:30:35 GMT</pubDate></item></channel></rss>