<?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[c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.)]]></title><description><![CDATA[<p>Ich möchte eigentlich ein Singleton aufbauen, dass irgendwelche events in ein logfile schreibt(Singleton, damit die Datei nur einmal geöffnet ist). Jedoch trat hierbei ein seltsames verhalten des Objekts auf: es ändert seine inneren (dynamischen) Zustände nicht. Außerdem wird der Destructor jedes mal, nachdem die Funktion &quot;run()&quot; aufgerufen wurde, ausgeführt.<br />
Hier habe ich ein Minimalbeispiel erstellt</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
class Singleton
{
    public:
		static void run(){getInstance().inc();}
	private:
		int counter;

		static Singleton getInstance();
		Singleton();
		~Singleton();
		static Singleton* Instance;
		void inc()
		{
			printf(&quot;%d\n&quot;,counter);
			counter=counter+1;
		}
};

Singleton* Singleton::Instance=NULL;

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

Singleton::Singleton()
{
    counter=1;
	printf(&quot;Constructor\n&quot;);
}

Singleton::~Singleton()
{
	printf(&quot;Destructor\n&quot;);
}

int main()
{
	Singleton::run();
	Singleton::run();
	Singleton::run();
	getchar();
}
</code></pre>
<p>Als Ausgang hätte ich erwartet:</p>
<pre><code>Constuctor
1
2
3
(möglicherweise)
Destructor
</code></pre>
<p>Erhalten habe ich jedoch (mit minGW C++ und Visual Studio)</p>
<p>Zwei Fragen hierzu:</p>
<p>1. Warum wird die variable counter des Objekts Instance nicht geändert?<br />
2. Warum kann das Objekt 3 mal zerstört werden, obwohl es nur einmal erstellt wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271211/c-singleton-problem-konstruktor-1x-aufgerufen-destruktor-beliebieg-oft</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 15:05:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271211.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Jul 2010 23:21:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sat, 24 Jul 2010 23:21:18 GMT]]></title><description><![CDATA[<p>Ich möchte eigentlich ein Singleton aufbauen, dass irgendwelche events in ein logfile schreibt(Singleton, damit die Datei nur einmal geöffnet ist). Jedoch trat hierbei ein seltsames verhalten des Objekts auf: es ändert seine inneren (dynamischen) Zustände nicht. Außerdem wird der Destructor jedes mal, nachdem die Funktion &quot;run()&quot; aufgerufen wurde, ausgeführt.<br />
Hier habe ich ein Minimalbeispiel erstellt</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
class Singleton
{
    public:
		static void run(){getInstance().inc();}
	private:
		int counter;

		static Singleton getInstance();
		Singleton();
		~Singleton();
		static Singleton* Instance;
		void inc()
		{
			printf(&quot;%d\n&quot;,counter);
			counter=counter+1;
		}
};

Singleton* Singleton::Instance=NULL;

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

Singleton::Singleton()
{
    counter=1;
	printf(&quot;Constructor\n&quot;);
}

Singleton::~Singleton()
{
	printf(&quot;Destructor\n&quot;);
}

int main()
{
	Singleton::run();
	Singleton::run();
	Singleton::run();
	getchar();
}
</code></pre>
<p>Als Ausgang hätte ich erwartet:</p>
<pre><code>Constuctor
1
2
3
(möglicherweise)
Destructor
</code></pre>
<p>Erhalten habe ich jedoch (mit minGW C++ und Visual Studio)</p>
<p>Zwei Fragen hierzu:</p>
<p>1. Warum wird die variable counter des Objekts Instance nicht geändert?<br />
2. Warum kann das Objekt 3 mal zerstört werden, obwohl es nur einmal erstellt wurde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931178</guid><dc:creator><![CDATA[alex29]]></dc:creator><pubDate>Sat, 24 Jul 2010 23:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sat, 24 Jul 2010 23:24:21 GMT]]></title><description><![CDATA[<p>Denk mal über den Code nach?</p>
<pre><code class="language-cpp">Singleton Singleton::getInstance() 
{ 
    if (Instance==0) 
        Instance=new Singleton(); 
    return *Instance; 
}
</code></pre>
<p>Tipp: Wertsemantik</p>
<p>Lösung: du willst ne Referenz von Singleton zurückgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931179</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 24 Jul 2010 23:24:21 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sat, 24 Jul 2010 23:59:26 GMT]]></title><description><![CDATA[<p>Vielleicht mal das Meyers-Singleton anschauen.</p>
<p>Ach ja, und eine private <code>getInstance()</code> -Methode macht natürlich besonders viel Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931184</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 24 Jul 2010 23:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sun, 25 Jul 2010 05:19:25 GMT]]></title><description><![CDATA[<p><a href="http://de.wikipedia.org/wiki/Singleton_%28Entwurfsmuster%29#Implementierung_in_C.2B.2B" rel="nofollow">http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)#Implementierung_in_C.2B.2B</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931199</guid><dc:creator><![CDATA[billiger]]></dc:creator><pubDate>Sun, 25 Jul 2010 05:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sun, 25 Jul 2010 10:39:17 GMT]]></title><description><![CDATA[<p>Klasse, vielen Dank.</p>
<p>Ich habe die Originalvariante &quot;verreinfacht&quot;, jedoch war mir dabei nicht bewusst, dass ich so nur eine Kopie mitliefere.</p>
<p>Ich wundere mich jedoch immer noch, warum der Dekonstruktor bei den Kopien jedes mal implizit aufgerufen wird. Wenn ich jedoch die Referenz mitgebe nie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931267</guid><dc:creator><![CDATA[alex29]]></dc:creator><pubDate>Sun, 25 Jul 2010 10:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sun, 25 Jul 2010 10:45:25 GMT]]></title><description><![CDATA[<p>alex29 schrieb:</p>
<blockquote>
<p>Ich wundere mich jedoch immer noch, warum der Dekonstruktor bei den Kopien jedes mal implizit aufgerufen wird. Wenn ich jedoch die Referenz mitgebe nie.</p>
</blockquote>
<p><strong>Destruktor!</strong></p>
<p>Der Destruktor wird aufgerufen, weil automatische und temporäre Objekte am Ende ihres Gültigkeitsbereiches zerstört werden. Mit der Referenz erstellst du hingegen kein neues Objekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931271</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 25 Jul 2010 10:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sun, 25 Jul 2010 11:09:48 GMT]]></title><description><![CDATA[<p>Ergänze mal den Copy-Constructor und dir wird evtl. ein Licht aufgehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<pre><code class="language-cpp">Singleton(const Singleton&amp; c);
</code></pre>
<pre><code class="language-cpp">Singleton::Singleton(const Singleton&amp; c){
std::cout &lt;&lt; &quot;copy&quot; &lt;&lt; std::endl;
this-&gt;counter = c.counter;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1931283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931283</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 25 Jul 2010 11:09:48 GMT</pubDate></item><item><title><![CDATA[Reply to c++ Singleton problem  (Konstruktor 1x aufgerufen, Destruktor beliebieg oft.) on Sun, 25 Jul 2010 12:04:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Singleton Singleton::getInstance()
{
    if (Instance==0)
        Instance=new Singleton();
    return *Instance;
}
</code></pre>
<p>-&gt;</p>
<pre><code class="language-cpp">/* static */ Singleton&amp; Singleton::getInstance()
{
   static Singleton onlyOne;
   return OnlyOne;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1931313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931313</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:04:48 GMT</pubDate></item></channel></rss>