<?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 Klasse]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>bin seit 2 Tagen dabei das Buch &quot;C++ für Spieleprogrammierer&quot; von Heiko Kalista durchzuarbeiten und bin jetzt bei den Singletons angelangt.<br />
So ganz erschließt sich mir jedoch nicht der Sinn der ganzen Sache.<br />
Es gab folgenden Code dazu:</p>
<pre><code class="language-cpp">#ifndef TSINGLETON
#define TSINGLETON

template &lt;typename T&gt;
class TSingleton
{
protected:
	static T *m_pSingleton;
public:
	TSingleton(void)
	{
	}
	virtual ~TSingleton(void)
	{
	}

	//create static object, if necessary
	inline static T* get()
	{
		if(!m_pSingleton)
			m_pSingleton = new T;

		return (m_pSingleton);
	}

	//delete static object
	static void del()
	{
		if(m_pSingleton)
		{
			delete (m_pSingleton);
			m_pSingleton = nullptr;
		}

	}
};

//create static variable
template &lt;typename T&gt;
T* TSingleton&lt;T&gt;::m_pSingleton=0;

#endif
</code></pre>
<p>Eingebaut wurde diese Klasse in eine andere Klasse namens CLogfile:</p>
<pre><code class="language-cpp">#pragma once
#include &quot;TSingleton.h&quot;

class CLogfile : public TSingleton&lt;CLogfile&gt;
{
public:
	CLogfile(void);
	~CLogfile(void);

	void status();
};
</code></pre>
<pre><code class="language-cpp">#include &quot;Logfile.h&quot;
#include &lt;iostream&gt;

CLogfile::CLogfile(void)
{
	std::cout &lt;&lt; &quot;Neues Logfile wurde erstellt\n&quot;;
}

CLogfile::~CLogfile(void)
{
	std::cout &lt;&lt; &quot;Logfile wurde geschlossen\n&quot;;
}

void CLogfile::status()
{
	std::cout &lt;&lt; &quot;Status wurde ins Logfile geschrieben!\n&quot;;
}
</code></pre>
<p>Die main dazu</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Logfile.h&quot;

void function()
{
	CLogfile::get()-&gt;status();
}

int main()
{
	function();

	CLogfile::del();
	return 0;
}
</code></pre>
<p>Mir geht's jetzt nicht darum, was das obige Beispiel genau tut, sondern darum, welchen Sinn und Zweck eine solche Singleton-Klasse erfüllt.</p>
<p>Wer toll wenn mir das jemand in einfachen Worten erklären und am besten mit einer Analogie verdeutlichen kann.</p>
<p>Vielen Dank</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290094/singleton-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 18:46:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290094.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Jul 2011 13:08:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton Klasse on Tue, 19 Jul 2011 13:08:19 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>bin seit 2 Tagen dabei das Buch &quot;C++ für Spieleprogrammierer&quot; von Heiko Kalista durchzuarbeiten und bin jetzt bei den Singletons angelangt.<br />
So ganz erschließt sich mir jedoch nicht der Sinn der ganzen Sache.<br />
Es gab folgenden Code dazu:</p>
<pre><code class="language-cpp">#ifndef TSINGLETON
#define TSINGLETON

template &lt;typename T&gt;
class TSingleton
{
protected:
	static T *m_pSingleton;
public:
	TSingleton(void)
	{
	}
	virtual ~TSingleton(void)
	{
	}

	//create static object, if necessary
	inline static T* get()
	{
		if(!m_pSingleton)
			m_pSingleton = new T;

		return (m_pSingleton);
	}

	//delete static object
	static void del()
	{
		if(m_pSingleton)
		{
			delete (m_pSingleton);
			m_pSingleton = nullptr;
		}

	}
};

//create static variable
template &lt;typename T&gt;
T* TSingleton&lt;T&gt;::m_pSingleton=0;

#endif
</code></pre>
<p>Eingebaut wurde diese Klasse in eine andere Klasse namens CLogfile:</p>
<pre><code class="language-cpp">#pragma once
#include &quot;TSingleton.h&quot;

class CLogfile : public TSingleton&lt;CLogfile&gt;
{
public:
	CLogfile(void);
	~CLogfile(void);

	void status();
};
</code></pre>
<pre><code class="language-cpp">#include &quot;Logfile.h&quot;
#include &lt;iostream&gt;

CLogfile::CLogfile(void)
{
	std::cout &lt;&lt; &quot;Neues Logfile wurde erstellt\n&quot;;
}

CLogfile::~CLogfile(void)
{
	std::cout &lt;&lt; &quot;Logfile wurde geschlossen\n&quot;;
}

void CLogfile::status()
{
	std::cout &lt;&lt; &quot;Status wurde ins Logfile geschrieben!\n&quot;;
}
</code></pre>
<p>Die main dazu</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;Logfile.h&quot;

void function()
{
	CLogfile::get()-&gt;status();
}

int main()
{
	function();

	CLogfile::del();
	return 0;
}
</code></pre>
<p>Mir geht's jetzt nicht darum, was das obige Beispiel genau tut, sondern darum, welchen Sinn und Zweck eine solche Singleton-Klasse erfüllt.</p>
<p>Wer toll wenn mir das jemand in einfachen Worten erklären und am besten mit einer Analogie verdeutlichen kann.</p>
<p>Vielen Dank</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094887</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Tue, 19 Jul 2011 13:08:19 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Klasse on Tue, 19 Jul 2011 13:22:13 GMT]]></title><description><![CDATA[<p>Es sieht mir doch ziemlich danach aus, dass schlicht verhindert werden soll, dass mehrere LogFiles existieren. Eine Klasse, die von Singleton erbt, kann somit nur einmal richtig erstellt werden. Analogien und Anwendungsbeispiele gibt es dafür genug, da fällt dir sicher auch schnell eins ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094892</guid><dc:creator><![CDATA[Bonzy]]></dc:creator><pubDate>Tue, 19 Jul 2011 13:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Klasse on Tue, 19 Jul 2011 17:13:41 GMT]]></title><description><![CDATA[<p>Und nur dafür ist sie gedacht? Also, dass man nur maximal 1 Instanz einer bestimmten Klasse erstellen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095027</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Tue, 19 Jul 2011 17:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Klasse on Tue, 19 Jul 2011 17:18:41 GMT]]></title><description><![CDATA[<p>Sorex schrieb:</p>
<blockquote>
<p>Und nur dafür ist sie gedacht? Also, dass man nur maximal 1 Instanz einer bestimmten Klasse erstellen kann?</p>
</blockquote>
<p>Das ist, wofür das Wort Singleton steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095031</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 19 Jul 2011 17:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Klasse on Tue, 19 Jul 2011 17:46:21 GMT]]></title><description><![CDATA[<p>Sorex schrieb:</p>
<blockquote>
<p>Und nur dafür ist sie gedacht? Also, dass man nur maximal 1 Instanz einer bestimmten Klasse erstellen kann?</p>
</blockquote>
<p>Ja. Nur dafür und für sonst nichts. Singletons sind kein Ersatz für globale Variablen. Eigentlich. Aber naja, das ist nicht ganz wahr. In C++ läßt sich die Initialisierungsreihenfolge globaler Variablen aus verschiedenen Übersetzungeseinheiten nicht gerade elegant regeln. Selbst wenn es ginge, z.B. statische Prioritöten zu vergeben, dann wäre es immernoch extrem fehleranfällig, weil im Konstruktor der einen vielleicht mittelbar über 20 Funktionsaufrufe die andere benutzt wird und der arme Programmierer muß eine Ordnung da reinbringen.<br />
Das Meyers-Singleton (oder das von oben) sorgt dafür, daß das Objekt erst unmittelbar vor der ersten Verwendung erzeugt wird und löst damit auch das Reihenfolge-Problem. Das ist aber nicht die heilige Lehre. Derzeit laufen Philosophie und Praxis der Singletons in C++ ein wenig auseinander.</p>
<p>Beispiel aus der Praxis:<br />
<a href="http://www.c-plusplus.net/forum/289990-13" rel="nofollow">http://www.c-plusplus.net/forum/289990-13</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2095045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095045</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 19 Jul 2011 17:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Klasse on Tue, 19 Jul 2011 18:15:27 GMT]]></title><description><![CDATA[<p>Okay, die ganze Geschichte ist mir jetzt etwas klarer<br />
danke euch <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/2095057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2095057</guid><dc:creator><![CDATA[Sorex]]></dc:creator><pubDate>Tue, 19 Jul 2011 18:15:27 GMT</pubDate></item></channel></rss>