<?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[ne frage zum singleton]]></title><description><![CDATA[<p>hio!<br />
ich wollte mal gerne wissen, weshalb der pointer in der die instanz gespeichert wird und die beiden memberfunktionen static sind?<br />
folgendes singleton:</p>
<pre><code class="language-cpp">#ifndef TSINGLETON
#define TSINGLETON

template &lt;class type&gt;
class T_singleton
{
    protected:

        // static membervars
        static type *m_p_singleton;     // statisches objekt

    public:

        // memberfuncs

        // dtor
        virtual ~T_singleton ()
        {
        }

        // static memberfuncs

        // get
        // aufgabe: wenn nötig, statisches objekt erzeugen
        // und Zeiger darauf zurückgeben
        inline static type* get ()
        {
            // existiert schon eine instanz?
            if (!m_p_singleton)
            {
                m_p_singleton = new type;      // nein, dann neue instanz erzeugen
            }

            // zeiger auf die instanz zurückgeben
            return m_p_singleton;
        } // get ende

        // del
        // aufgabe: statisches objekt freigeben
        static void del ()
        {
            // gab es eine instanz?
            if (m_p_singleton)
            {
                delete m_p_singleton;       // ja, dann freigeben
                m_p_singleton = NULL;       // und zeiger auf NULL setzen
            }
        } // del
};

// globals
// declare (define) static membervars
template &lt;class type&gt;
type* T_singleton&lt;type&gt; :: m_p_singleton = 0;

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/123287/ne-frage-zum-singleton</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 13:05:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123287.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 14 Oct 2005 17:00:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 17:00:31 GMT]]></title><description><![CDATA[<p>hio!<br />
ich wollte mal gerne wissen, weshalb der pointer in der die instanz gespeichert wird und die beiden memberfunktionen static sind?<br />
folgendes singleton:</p>
<pre><code class="language-cpp">#ifndef TSINGLETON
#define TSINGLETON

template &lt;class type&gt;
class T_singleton
{
    protected:

        // static membervars
        static type *m_p_singleton;     // statisches objekt

    public:

        // memberfuncs

        // dtor
        virtual ~T_singleton ()
        {
        }

        // static memberfuncs

        // get
        // aufgabe: wenn nötig, statisches objekt erzeugen
        // und Zeiger darauf zurückgeben
        inline static type* get ()
        {
            // existiert schon eine instanz?
            if (!m_p_singleton)
            {
                m_p_singleton = new type;      // nein, dann neue instanz erzeugen
            }

            // zeiger auf die instanz zurückgeben
            return m_p_singleton;
        } // get ende

        // del
        // aufgabe: statisches objekt freigeben
        static void del ()
        {
            // gab es eine instanz?
            if (m_p_singleton)
            {
                delete m_p_singleton;       // ja, dann freigeben
                m_p_singleton = NULL;       // und zeiger auf NULL setzen
            }
        } // del
};

// globals
// declare (define) static membervars
template &lt;class type&gt;
type* T_singleton&lt;type&gt; :: m_p_singleton = 0;

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/892517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892517</guid><dc:creator><![CDATA[chris&#x27; 1]]></dc:creator><pubDate>Fri, 14 Oct 2005 17:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 17:42:50 GMT]]></title><description><![CDATA[<p>Von einem Singleton soll nur eine Instanz existieren. Diese Instanz muss verwaltet werden und von überall zugreifbar sein. Da nur eine Instanz existieren soll, wird die Instanzvariable statisch gemacht und die Zugriffsmethoden auch (dadurch &quot;spart&quot; man sich eine globale Variable, die den Zeiger hält).</p>
<p>Normalerweise stellt man zumindest noch sicher, dass man nicht zwei Instanzen von dem Singleton erzeugen kann (bei dem Template-Code von Dir hindert der Compiler Dich nicht dran).</p>
<pre><code class="language-cpp">class X {
};

typedef T_Singleton&lt;X&gt; SingleX;

void f() 
{
  X* x( SingleX::get());
  // mach was mit x
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/892546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892546</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Fri, 14 Oct 2005 17:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 18:05:13 GMT]]></title><description><![CDATA[<p>EDIT: Bloedsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892556</guid><dc:creator><![CDATA[Apollon]]></dc:creator><pubDate>Fri, 14 Oct 2005 18:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 18:50:35 GMT]]></title><description><![CDATA[<p>und das del() ist auch etwas überflüssig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892573</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 14 Oct 2005 18:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 19:32:12 GMT]]></title><description><![CDATA[<p>net schrieb:</p>
<blockquote>
<p>und das del() ist auch etwas überflüssig</p>
</blockquote>
<p>Nicht wenn Du es im Destruktor aufrufst. Damit kann man mit noch einem kleinen Trick feststellen, dass das Singleton schon tot ist (Zerstörungsreihenfolge von statischen Objekten).</p>
<p>Hier mal noch eine Singleton-Implementierung, die mir sehr gut gefällt und sich dem bereits toten Singleton annimmt. Ist quasi übernommen aus &quot;Modern C++ Design&quot;.</p>
<pre><code class="language-cpp">// Singleton.h
class Singleton
{
public:
  Singleton&amp; Instance()
  {
    if (!pInstance_)
    {
      // Check for dead reference
      if (destroyed_)
      {
        OnDeadReference();
      }
      else
      {
        // First call—initialize
        Create();
      }
    }
    return pInstance_;
  }
private:
  // Create a new Singleton and store a
  // pointer to it in pInstance_
  static void Create();
  {
    // Task: initialize pInstance_
    static Singleton theInstance;
    pInstance_ = &amp;theInstance;
  }
  // Gets called if dead reference detected
  static void OnDeadReference()
  {
    throw std::runtime_error(&quot;Stocherst Du gern in Leichen? :D&quot;);
  }
  virtual ~Singleton()
  {
    pInstance_ = 0;
    destroyed_ = true;
  }
  // Data
  Singleton pInstance_;
  bool destroyed_;
  ... disabled 'tors/operator= ...
};

// Singleton.cpp
Singleton* Singleton::pInstance_ = 0;
bool Singleton::destroyed_ = false;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/892581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892581</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 14 Oct 2005 19:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 19:23:52 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>net schrieb:</p>
<blockquote>
<p>und das del() ist auch etwas überflüssig</p>
</blockquote>
<p>Nicht wenn Du es im Destruktor aufrufst. Damit kann man mit noch einem kleinen Trick feststellen, dass das Singleton schon tot ist (Zerstörungsreihenfolge von statischen Objekten).</p>
</blockquote>
<p>dieses objekt ist aber nicht statisch weils auf'n heap gepackt wird. mit diesem del () kann man's beseitigen, aber ich denke zu einem singleton gehört nicht nur dessen einmaligkeit sondern auch das es ständig verfügbar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892598</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Fri, 14 Oct 2005 19:23:52 GMT</pubDate></item><item><title><![CDATA[Reply to ne frage zum singleton on Fri, 14 Oct 2005 19:35:30 GMT]]></title><description><![CDATA[<p>Der Zeiger ist aber statisch in dem Beispiel, was auch ausreicht. Der Trick ist eben, das statische Objekt in ne Createfunktion zu packen und den Zeiger an das getInstance rauszureichen. Hab meinen obigen Post noch editiert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/892608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892608</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Fri, 14 Oct 2005 19:35:30 GMT</pubDate></item></channel></rss>