<?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[Singleton Template]]></title><description><![CDATA[<p>Ich versuche folgenden Code zu implementieren:</p>
<pre><code class="language-cpp">template &lt;typename C&gt;
 class Singleton
 {
 public:
    static C* instance ()
    {
       if (!_instance)
          _instance = new C ();
       return _instance;
    }
    virtual
    ~Singleton ()
    {
       _instance = 0;
    }
 private:
    static C* _instance;
protected:
    Singleton () { }
 };
 template &lt;typename C&gt; C* Singleton &lt;C&gt;::_instance = 0;

/* Verwendung */
 class Test : public Singleton &lt;Test&gt;
 {
 friend class Singleton &lt;Test&gt;;
 public:
    ~Test () { };
    static Test* instance ()
    {
       return Singleton &lt;Test&gt;::instance ();
    }
    void xyz () { }
 protected:
    Test () : Singleton &lt;Test&gt; () { }
 };
 Test::instance ()-&gt;xyz ();
</code></pre>
<p>Dabei frage ich mich aber warum der Konstruktor von Test eliminiert wird, bzw warum der Konstruktor von Singleton aufgerufen wird:</p>
<pre><code class="language-cpp">protected:
    Test () : Singleton &lt;Test&gt; () { }
</code></pre>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224505/singleton-template</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 13:14:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224505.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Oct 2008 13:39:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 13:39:17 GMT]]></title><description><![CDATA[<p>Ich versuche folgenden Code zu implementieren:</p>
<pre><code class="language-cpp">template &lt;typename C&gt;
 class Singleton
 {
 public:
    static C* instance ()
    {
       if (!_instance)
          _instance = new C ();
       return _instance;
    }
    virtual
    ~Singleton ()
    {
       _instance = 0;
    }
 private:
    static C* _instance;
protected:
    Singleton () { }
 };
 template &lt;typename C&gt; C* Singleton &lt;C&gt;::_instance = 0;

/* Verwendung */
 class Test : public Singleton &lt;Test&gt;
 {
 friend class Singleton &lt;Test&gt;;
 public:
    ~Test () { };
    static Test* instance ()
    {
       return Singleton &lt;Test&gt;::instance ();
    }
    void xyz () { }
 protected:
    Test () : Singleton &lt;Test&gt; () { }
 };
 Test::instance ()-&gt;xyz ();
</code></pre>
<p>Dabei frage ich mich aber warum der Konstruktor von Test eliminiert wird, bzw warum der Konstruktor von Singleton aufgerufen wird:</p>
<pre><code class="language-cpp">protected:
    Test () : Singleton &lt;Test&gt; () { }
</code></pre>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596969</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 10 Oct 2008 13:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 13:44:52 GMT]]></title><description><![CDATA[<blockquote>
<p>Dabei frage ich mich aber warum der Konstruktor von Test eliminiert wird, bzw warum der Konstruktor von Singleton aufgerufen wird:</p>
</blockquote>
<p><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 />
Wie wird den ein Konstruktor eliminiert?!</p>
<p>Singleton hatten wir gerade Heute wieder:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-224455.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-224455.html</a></p>
<p>Und ich rate auch dir das Meyers Singleton zu benutzen, anstatt etwas so unhandliches zu basteln..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596974</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 10 Oct 2008 13:44:52 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 13:56:57 GMT]]></title><description><![CDATA[<p>Ich habe den Code übrigens hierher:<br />
<a href="http://de.wikibooks.org/wiki/C++-Programmierung:_Entwurfsmuster:_Singleton" rel="nofollow">http://de.wikibooks.org/wiki/C++-Programmierung:_Entwurfsmuster:_Singleton</a></p>
<p>Du meinst das hier?</p>
<pre><code class="language-cpp">class Singleton {
    public:
    static Singleton&amp; Instance() {
      static Singleton theSingleton;
      return theSingleton;
    }
    /* more (non-static) functions here */
    private:
    Singleton(); // ctor hidden
    Singleton(Singleton const&amp;); // copy ctor hidden
    Singleton&amp; operator=(Singleton const&amp;); // assign op. hidden
    ~Singleton(); // dtor hidden
    };
</code></pre>
<p>Das ist dann zwar nicht mehr in einem Template aber wenigstes einfach gehalten.</p>
<p>Kann ich dabei eigentlich noch bestimmen wann die Klasse konstruiert wird, und kann ich sie bei bedarf auch dekonstruieren? Denn das wird hier ja explizit verboten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596979</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 10 Oct 2008 13:56:57 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 14:11:23 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Kann ich dabei eigentlich noch bestimmen wann die Klasse konstruiert wird, und kann ich sie bei bedarf auch dekonstruieren? Denn das wird hier ja explizit verboten.</p>
</blockquote>
<p>Die Konstruktion wird, wie bei Deiner ersten Variante auch, beim ersten Aufruf von getInstace() durchgeführt. Dafür gibt es auch ein Idiom, dass heisst &quot;Construct on first use&quot;.<br />
Die Zerstörung des Objekts hingegen passiert irgendwann wärend Dein Programm beendet wird. Wann genau, das lässt sich nicht beeinflussen. Dafür gibt es aber andere Singleton Varianten, die leider auch ein wenig komplizierter werden.<br />
Es gibt z.B. Singletons mit festlegbarer Zerstörungspriorität (ich meine, dass nennt sich Longevity-Singleton). Andere Singletons werden zwar zerstört, sollten sie aber nach der Zerstörung nochmal benötigt werden (z.B. weil ein anderes Singleton, welches später zerstört wird es nochmal braucht), werden sie wieder neu erzeugt und dann wieder zerstört usw. (Stichwort: Phönix Singleton).</p>
<p>Wenn man es soch macht, wie in Deiner ersten Version, braucht man sich um sowas nicht zu kümmern, da die Objekte bestehen bleiben, bis das Betriebssystem sie wegräumt. Das setzt natürlich voraus, dass Du ein Betriebssystem hast, dass sowas auch wirklich macht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596987</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 10 Oct 2008 14:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 14:10:43 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn man es soch macht, wie in Deiner ersten Version, braucht man sich um sowas nicht zu kümmern, da die Objekte bestehen bleiben, bis das Betriebssystem sie wegräumt. Das setzt natürlich voraus, dass Du ein Betriebssystem hast, dass sowas auch wirklich macht...</p>
</blockquote>
<p>Oder man überlässt es mit einer &quot;Quit-Funktion&quot; dem User des Singletons das aufräumen, was aber nicht unbedingt sehr elegant ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596994</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 10 Oct 2008 14:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 14:11:38 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn man es soch macht, wie in Deiner ersten Version, braucht man sich um sowas nicht zu kümmern, da die Objekte bestehen bleiben, bis das Betriebssystem sie wegräumt. Das setzt natürlich voraus, dass Du ein Betriebssystem hast, dass sowas auch wirklich macht...</p>
</blockquote>
<p>Ich verstehe nur Bahnhof.<br />
Natürlich möchte ich das die Objekte beim Programmende aus dem Speicher entfernt werden.</p>
<p>Warum sollte das bei meinem Template Beispiel nicht passieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596996</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Fri, 10 Oct 2008 14:11:38 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 14:14:33 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Ich verstehe nur Bahnhof.<br />
Natürlich möchte ich das die Objekte beim Programmende aus dem Speicher entfernt werden.</p>
<p>Warum sollte das bei meinem Template Beispiel nicht passieren?</p>
</blockquote>
<p>Ja. Du möchtest es, aber du tust es nicht. Ein new ohne ein delete gibt dir ein Speicherleck und das OS muss aufräumen.</p>
<p>btw:<br />
Warum bist du so erpicht auf einen Templateansatz? - Das eine hat mit dem anderen rein gar nichts zu tun. - Du kannst auch das Meyers Singleton mit einem Template machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596999</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 10 Oct 2008 14:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Template on Fri, 10 Oct 2008 14:15:03 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Tachyon schrieb:</p>
<blockquote>
<p>Wenn man es soch macht, wie in Deiner ersten Version, braucht man sich um sowas nicht zu kümmern, da die Objekte bestehen bleiben, bis das Betriebssystem sie wegräumt. Das setzt natürlich voraus, dass Du ein Betriebssystem hast, dass sowas auch wirklich macht...</p>
</blockquote>
<p>Ich verstehe nur Bahnhof.<br />
Natürlich möchte ich das die Objekte beim Programmende aus dem Speicher entfernt werden.</p>
<p>Warum sollte das bei meinem Template Beispiel nicht passieren?</p>
</blockquote>
<p>Weil es zu dem new kein delete gibt. Wie gesagt, normalerweise entfernen moderne Betriebsysteme Objekte, die nach dem Programmende noch hängen geblieben sind.<br />
Es gibt aber durchaus Plattformen, wo es so &quot;fortschrittliches&quot; Speichermanagement nicht gibt. C++ programmierbare digitale Signalprozessoren z.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1597002</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1597002</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 10 Oct 2008 14:15:03 GMT</pubDate></item></channel></rss>