<?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 so OK?]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>als Umsteiger von PHP möchte ich zur Zeit die wichtigsten OOP-Patterns testen.<br />
Da es in PHP weder Pointer noch strenge Datentypskontrollen gibt, ist C++ schon ein bisschen komplizierter.</p>
<p>Deshalb wollte ich fragen, ob meine Impletmentierung des Singletons so gut ist.</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class Singleton
{
  private:
    static Singleton* instanz;

  protected:
    Singleton() { };
    Singleton(const Singleton&amp;){};

  public:
    static Singleton* getInstance();
};

Singleton* Singleton::instanz = 0;

Singleton* Singleton::getInstance()
{
  if(instanz == 0)
  {
     instanz = new Singleton;
  }
  return instanz;
}

int main()
{
  Singleton * gibtsnureinmal = Singleton::getInstance();
  Singleton * dasistgleichwiegibtsnureinmal = Singleton::getInstance();
  Singleton * unddasauch = Singleton::getInstance();
  if(gibtsnureinmal == unddasauch)
  {
    cout&lt;&lt;&quot;Die beiden Objekte sind die gleichen, nur unter anderen Namen.&quot;;
    system(&quot;pause&quot;);
  }
  return 0;
}
</code></pre>
<p>Es funktioniert zumindest...</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224455/singleton-so-ok</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 14:26:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224455.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Oct 2008 16:48:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 16:48:05 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>als Umsteiger von PHP möchte ich zur Zeit die wichtigsten OOP-Patterns testen.<br />
Da es in PHP weder Pointer noch strenge Datentypskontrollen gibt, ist C++ schon ein bisschen komplizierter.</p>
<p>Deshalb wollte ich fragen, ob meine Impletmentierung des Singletons so gut ist.</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class Singleton
{
  private:
    static Singleton* instanz;

  protected:
    Singleton() { };
    Singleton(const Singleton&amp;){};

  public:
    static Singleton* getInstance();
};

Singleton* Singleton::instanz = 0;

Singleton* Singleton::getInstance()
{
  if(instanz == 0)
  {
     instanz = new Singleton;
  }
  return instanz;
}

int main()
{
  Singleton * gibtsnureinmal = Singleton::getInstance();
  Singleton * dasistgleichwiegibtsnureinmal = Singleton::getInstance();
  Singleton * unddasauch = Singleton::getInstance();
  if(gibtsnureinmal == unddasauch)
  {
    cout&lt;&lt;&quot;Die beiden Objekte sind die gleichen, nur unter anderen Namen.&quot;;
    system(&quot;pause&quot;);
  }
  return 0;
}
</code></pre>
<p>Es funktioniert zumindest...</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596471</guid><dc:creator><![CDATA[Hallo!]]></dc:creator><pubDate>Thu, 09 Oct 2008 16:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 17:03:00 GMT]]></title><description><![CDATA[<p>Hi,<br />
Ich würde noch folgende Punkte anders machen:<br />
- Ctor und Copy Ctor private (nicht protected)<br />
- Copy Ctor nicht def. (nur dekl.)<br />
- Assignement operator auch privat dekl. (nicht def.)<br />
- Eine Methode bereitstellen, die dann wieder delete aufruft (z.B. shutdown)</p>
<p>Zu berücksichtigen ist, dass dieses Singleton nicht Thread-Safe ist.</p>
<p>Simon</p>
<p>Edit:<br />
Eine umfangreiche Diskussion des Singleton Pattern ist in Modern C++ Design von Andrei Alexandrescu zu finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596475</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 09 Oct 2008 17:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 17:02:12 GMT]]></title><description><![CDATA[<p>EDIT: Vergiss es, hab was überlesen: Passt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596476</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Thu, 09 Oct 2008 17:02:12 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 17:23:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Singleton* Singleton::getInstance() 
{ 
  if(instanz == 0) 
  { 
     instanz = new Singleton; 
  } 
  return instanz; 
}
</code></pre>
<p>Zu jedem <code>new</code> , gehört auch ein <code>delete</code> ... und wann gibst du diesen Speicher wieder frei? Klar, wird es das Betriebsystem beim Beenden übernehmen, zumindest normalerweise, aber davon sollte man nicht ausgehen!</p>
<p>Daher wäre es besser, wenn du sowas machst:</p>
<pre><code class="language-cpp">Singleton&amp; Singleton::getInstance()
{
  static Singleton instance;
  return instance;
}
</code></pre>
<p><code>static</code> garantiert hier, dass bei jedem Methodenaufruf genau das gleiche Objekt verwendet wird, bzw. dass das Objekt erhalten bleibt. Es wird auch erst beim ersten Aufruf initialisiert. Der Speicher wird dann am Ende auch korrekt freigegeben.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596487</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 09 Oct 2008 17:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 17:51:56 GMT]]></title><description><![CDATA[<p>Danke!</p>
<p>Bei diesem Code funktioniert ein Vergleich der beiden Objekte nicht:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
using namespace std;

class Singleton
{
  private:
    Singleton();
    Singleton(const Singleton&amp;);

  public:
    static Singleton&amp; getInstance();
};

Singleton&amp; Singleton::getInstance()
{
  static Singleton instanz;
  return instanz;
}

int main()
{
  Singleton &amp;gibtsnureinmal = Singleton::getInstance();
  Singleton &amp;unddasauch = Singleton::getInstance();
  if(gibtsnureinmal == unddasauch)
  {
    cout&lt;&lt;&quot;Die beiden Objekte sind die gleichen, nur unter anderen Namen.&quot;;
    system(&quot;pause&quot;);
  }
  return 0;
}
</code></pre>
<p>C++-Builder will, dass ich den ==-Operatpr implementiere. Dabei will ich doch nur testen, ob die beiden Objekte die gleichen sind</p>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596500</guid><dc:creator><![CDATA[Hallo!]]></dc:creator><pubDate>Thu, 09 Oct 2008 17:51:56 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 17:55:14 GMT]]></title><description><![CDATA[<p>Hallo! schrieb:</p>
<blockquote>
<p>C++-Builder will, dass ich den ==-Operatpr implementiere. Dabei will ich doch nur testen, ob die beiden Objekte die gleichen sind</p>
</blockquote>
<p>Hehe, du lieferst dir die Erklärung gleich im eigenen Satz. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Vergleiche von selbst erstellten Klassen erfordern eine Implementierung des entsprechenden Operators. In deinem Falle von <code>operator==</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596503</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 09 Oct 2008 17:55:14 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 17:56:47 GMT]]></title><description><![CDATA[<p>Vergleiche die Zeiger. Du willst doch schliesslich wissen ob beides die gleiche Instanz ist und nicht ob der Inhalt gleich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596505</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 09 Oct 2008 17:56:47 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 18:06:08 GMT]]></title><description><![CDATA[<p>Also so?<br />
(scheint zu klappen)</p>
<pre><code class="language-cpp">int main()
{
  Singleton &amp;gibtsnureinmal = Singleton::getInstance();
  Singleton &amp;unddasauch = Singleton::getInstance();

  Singleton *ptr1 = &amp;unddasauch;
  Singleton *ptr2 = &amp;gibtsnureinmal;
  if(ptr1 == ptr2)
  {
    cout&lt;&lt;&quot;Die beiden Objekte sind die gleichen, nur unter anderen Namen.&quot;;
    system(&quot;pause&quot;);
  }
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1596509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596509</guid><dc:creator><![CDATA[Hallo!]]></dc:creator><pubDate>Thu, 09 Oct 2008 18:06:08 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 18:11:28 GMT]]></title><description><![CDATA[<p>Ja, wobei du dann nicht unbedingt den Umweg über eine Referenz einschlagen musst.</p>
<p>Du scheinst ja schon sehr misstrauisch gegenüber C++ eingestellt zu sein. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596515</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 09 Oct 2008 18:11:28 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 18:19:15 GMT]]></title><description><![CDATA[<p>Wie würdest du es machen?</p>
<p>Hast du ein gutes Tutorial für Umsteiger aus anderen Sprachen?<br />
Ich bin von PHP sehr verwöhnt, wenn es Dokumentation angeht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> 30 Sekunden googlen und das Problem ist gelöst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596522</guid><dc:creator><![CDATA[Hallo!]]></dc:creator><pubDate>Thu, 09 Oct 2008 18:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 18:55:32 GMT]]></title><description><![CDATA[<p>C++ und PHP sind so unterschiedliche Sprachen, da sollte man bei C++ einfach von Grund auf anfangen. Am besten in C++ sind Bücher zu empfehlen, gibt zwar auch ein paar Tutorials (siehe FAQ), aber die Bücher vermitteln einem im allgemeinen einen umfassenderen Eindruck.</p>
<p>Zu empfehlen sind hauptsächlich diese zwei:<br />
1. C++ Primer<br />
<a href="https://duckduckgo.com/?q=isbn+9783827326126&amp;cppnetbooks" rel="nofollow">C++ Primer | ISBN: 9783827326126</a><br />
2. Thinking in C++ 1&amp;2: <a href="http://mindview.net/Books/TICPP/ThinkingInCPP2e.html" rel="nofollow">http://mindview.net/Books/TICPP/ThinkingInCPP2e.html</a></p>
<p>Zudem würde ich im Inet noch diese C++ Standardbibliothek Referenz empfehlen:<br />
<a href="http://www.cpluslus.com/reference/" rel="nofollow">http://www.cpluslus.com/reference/</a></p>
<p>Sie ist allerdings nicht ganz vollständig. Fehlen tut allerdings nicht all zu viel und wenn man wirklich eine vollständige Dokumentation möchte, dann gibt es da auch gute Bücher <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596542</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 09 Oct 2008 18:55:32 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Thu, 09 Oct 2008 20:15:35 GMT]]></title><description><![CDATA[<p>Was Tutorials betrifft, gabs hier kürzlich einen Thread dazu: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-224167.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-224167.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596573</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 09 Oct 2008 20:15:35 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Fri, 10 Oct 2008 06:30:01 GMT]]></title><description><![CDATA[<p>Also in deinem Falle reicht das Meyers Singleton (von Dravere vorgestellt) völlig.<br />
Wenn du tatsächlich über zerstörung bestimmen willst, dann empfehle ich dir das Phönix Singletonmuster anzuschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596658</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 10 Oct 2008 06:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton so OK? on Fri, 10 Oct 2008 09:00:58 GMT]]></title><description><![CDATA[<p>Mal im Ernst:<br />
Du erstellst ein Singleton. Das Singleton-Pattern <em>garantiert</em>, dass es in einem Programm nur eine einzige Instanz der Singletonklasse geben <em>kann</em>. Es lässt sich nicht Kopieren und auch nicht durch den Benutzer instanziieren. Die einzige Möglichkeit die (einzige) Instanz zu erzeugen, ist der erste Aufruf von getInstance().<br />
Es muss also nicht geprüft werden, ob zwei Referenzen auf das Singleton auf das Singleton ( <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ) zeigen. Das ist durch das Pattern bereits implizit vorgegeben.</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Also in deinem Falle reicht das Meyers Singleton (von Dravere vorgestellt) völlig.<br />
Wenn du tatsächlich über zerstörung bestimmen willst, dann empfehle ich dir das Phönix Singletonmuster anzuschauen.</p>
</blockquote>
<p>Wie kommst Du aufgrund des Threads auf solch recht komplizierte Teile wie das Phönix Singleton? Er hat doch gar nicht nach der Lebensdauer des Singletons gefragt?!<br />
Das Phönix Singleton macht nur Sinn, wenn es beim Beenden des Programms zu irgendwelchen Race Conditions zwischen verschiedenen, voneineinander abhängigen Singletons kommt. Das der TO solche Probleme hat, wage ich mal zu bezweifeln.<br />
(Mal davon abgesehen, dass das P.S. auch keine Möglichkeiten bietet, explizit über den Zerstörungszeitpunkt zu bestimmen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1596734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1596734</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Fri, 10 Oct 2008 09:00:58 GMT</pubDate></item></channel></rss>