<?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 Pattern]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

  class Singleton
  {
    private:
      //Konstruktor private, damit man sich keine Instanzen holen kann.
		Singleton(){}
      //Den Kopierkonstruktor schützen um zu vermeiden, dass das Objekt unbeabsichtigt kopiert wird.
		Singleton(const Singleton&amp; cc){}

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

  Singleton&amp; Singleton::getInstance()
  {
    Singleton instance;
    return instance;
  }

void main(void){

	Singleton&amp; x=Singleton::getInstance(); // REferenz auf lokales Objekt

}
</code></pre>
<p>ich hab in der methode getinstance() das static weggelassen . trotzdem funktionierts. Jetzt könnten wohl auch mehrere Instanzen von singleton angelegt werden. Frag mich trotzdem welche Referenz getinstance da zurückliefert.<br />
die instance variable ist ja jetzt lokal .</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270399/singleton-pattern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 08:10:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270399.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Jul 2010 23:38:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton Pattern on Sun, 11 Jul 2010 23:38:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt;

  class Singleton
  {
    private:
      //Konstruktor private, damit man sich keine Instanzen holen kann.
		Singleton(){}
      //Den Kopierkonstruktor schützen um zu vermeiden, dass das Objekt unbeabsichtigt kopiert wird.
		Singleton(const Singleton&amp; cc){}

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

  Singleton&amp; Singleton::getInstance()
  {
    Singleton instance;
    return instance;
  }

void main(void){

	Singleton&amp; x=Singleton::getInstance(); // REferenz auf lokales Objekt

}
</code></pre>
<p>ich hab in der methode getinstance() das static weggelassen . trotzdem funktionierts. Jetzt könnten wohl auch mehrere Instanzen von singleton angelegt werden. Frag mich trotzdem welche Referenz getinstance da zurückliefert.<br />
die instance variable ist ja jetzt lokal .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924819</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Sun, 11 Jul 2010 23:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Sun, 11 Jul 2010 23:40:19 GMT]]></title><description><![CDATA[<p>Das crasht. Nix gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924820</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 11 Jul 2010 23:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Sun, 11 Jul 2010 23:46:21 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Singleton&amp; Singleton::getInstance()
  {
    Singleton instance;
    return instance;
  }
</code></pre>
</blockquote>
<p>Hier sollte dein Compiler eine Warnung ausgeben, weil du eine Referenz auf<br />
ein Stack-Objekt zurücklieferst.</p>
<p>blurry333 schrieb:</p>
<blockquote>
<p>ich hab in der methode getinstance() das static weggelassen . trotzdem funktionierts. Jetzt könnten wohl auch mehrere Instanzen von singleton angelegt werden. Frag mich trotzdem welche Referenz getinstance da zurückliefert.<br />
die instance variable ist ja jetzt lokal .</p>
</blockquote>
<p>Bei jedem Aufruf der Funktion wird ein neues Objekt auf dem Stack angelegt.<br />
Warum es nicht crashed?<br />
You're lucky.<br />
Im Stack steht zwar noch der Inhalt aber das Objekt existiert nicht mehr.<br />
Wenn du den Stack nun beanspruchst (Funktionsaufrufe oder lokale Variablen)<br />
wirst du die Werte überschreiben. Spätestens dann crashed es!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924821</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Jul 2010 23:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 00:42:30 GMT]]></title><description><![CDATA[<p>das kompiliert nicht mal:<br />
<code>void main(void){</code></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924824</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 12 Jul 2010 00:42:30 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 07:16:48 GMT]]></title><description><![CDATA[<blockquote>
<p>trotzdem funktionierts.</p>
</blockquote>
<p>Undefiniertes Verhalten, manchmal funktioniert es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924852</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 12 Jul 2010 07:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 07:45:42 GMT]]></title><description><![CDATA[<p>static Variablen einer Funktion werden wohl im ARbeitsspeicher und nicht<br />
auf dem STack abgelegt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924863</guid><dc:creator><![CDATA[blurry333]]></dc:creator><pubDate>Mon, 12 Jul 2010 07:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 07:54:49 GMT]]></title><description><![CDATA[<p>Zwar ist deine Aussage streng genommen korrekt, aber sicher nicht das, was du meinst. Der Stack liegt auf dem Arbeitsspeicher. Der Arbeitsspeicher wird für dich als Anwendung aufgeteilt in unterschiedliche Bereiche (nicht physikalisch gesehen, sondern logisch) und einen solchen Bereich nennt man Stack.</p>
<p>Edit: Wobei Arbeitsspeicher wieder etwas zu ungenau formuliert ist. Mit Arbeitsspeicher meine ich hier deinen Hauptspeicher (RAM) und alle möglichen Caches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924865</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 12 Jul 2010 07:54:49 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 08:05:44 GMT]]></title><description><![CDATA[<p>blurry333 schrieb:</p>
<blockquote>
<p>static Variablen einer Funktion werden wohl im ARbeitsspeicher und nicht<br />
auf dem STack abgelegt ?</p>
</blockquote>
<p><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>Der Arbeitsspeicher unterteilt sich in mehrere Bereiche.<br />
Mir fallen gerade mal ein: Stack, Heap, Programmcode (kein Plan wie der Fachmännisch heißt)<br />
Der Stack ist wie der Name schon sagt ein Stapel.<br />
Dort wird alles an lokalen Variablen, Funktionsparametern, Rücksprungadressen für Funktionen<br />
abgelegt. Wenn der Gültigkeitsbereich einer Variablen oder Funktionsparameter<br />
vorüber ist oder die Funktion beendet ist, wird der Bereich wieder verwendet.<br />
Wenn du Daten auf dem Heap anlegen möchtest mußt du diese mit new, new[] (oder<br />
malloc) erzeugen. Dann organisiert dir dein Betriebssystem irgendwo einen<br />
Speicherbereich den du verwenden kannst. Nachteil: Du mußt diesen manuell<br />
wieder freigeben (delete, delete[] oder free)<br />
Dann gibts noch einen anderen Bereich, wo der Programmcode ist.<br />
Dieser ist eigentlich weniger von Bedeutung, allerdings vermute ich<br />
dass statische Variablen dort verankert werden. Ich weiß es aber nicht!!!</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924870</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Jul 2010 08:05:44 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 08:22:51 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Dann gibts noch einen anderen Bereich, wo der Programmcode ist.<br />
Dieser ist eigentlich weniger von Bedeutung, allerdings vermute ich<br />
dass statische Variablen dort verankert werden. Ich weiß es aber nicht!!!</p>
</blockquote>
<p>Halbkorrekt. Es gibt einen Bereich der sich Data nennt, da werden statische und globale Variablen gespeichert. Auch die Literale liegen hier. Dann gibt es noch das Codesegment, wo der eigentliche Programmcode liegt. Dies ist aber von den statischen Variablen abgegrenzt und (sofern die Architektur dies erlaubt) gegen Schreiben geschützt.</p>
<p>Man sollte aber noch sagen, dass diese ganze Unterteilung alles nur Konvention ist, wie Compiler ihren Code organisieren. Die Prozessoren und Betriebssysteme kommen ihnen mit Spezialfunktionen entgegen, weswegen es auch Sinn macht, sich daran zu halten. Aber wenn man beispielsweise selber ein Programm in Assembler schreibt, dann braucht man sich überhaupt nicht darum zu kümmern (Es macht aber Sinn, es trotzdem zu tun, die Einteilung ist schon gut überlegt). Oder wenn man seinen eigenen Compiler schreibt, braucht der Code den dieser Erzeugt sich auch nicht daran zu halten. Natürlich wäre Kompatibilität mit anderen Compilern dadurch vollständig ausgeschlossen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924879</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 12 Jul 2010 08:22:51 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Pattern on Mon, 12 Jul 2010 08:27:05 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>CSpille schrieb:</p>
<blockquote>
<p>Dann gibts noch einen anderen Bereich, wo der Programmcode ist.<br />
Dieser ist eigentlich weniger von Bedeutung, allerdings vermute ich<br />
dass statische Variablen dort verankert werden. Ich weiß es aber nicht!!!</p>
</blockquote>
<p>Halbkorrekt. Es gibt einen Bereich der sich Data nennt, da werden statische und globale Variablen gespeichert. Auch die Literale liegen hier. Dann gibt es noch das Codesegment, wo der eigentliche Programmcode liegt. Dies ist aber von den statischen Variablen abgegrenzt und (sofern die Architektur dies erlaubt) gegen Schreiben geschützt.</p>
</blockquote>
<p>Ich erinner mich...<br />
Lang ist es her...<br />
Assembler cs und ds<br />
bzw. .code und .data <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1924881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1924881</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 12 Jul 2010 08:27:05 GMT</pubDate></item></channel></rss>