<?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 Destuktor wird nicht aufgeruden]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe eine Singleton Klasse geschrieben. Mein Problem ist, das der Destruktor nicht aufgerufen wird. Habe schon mal gegooglt und habe unter anderem gelesen, dass der Destruktor am Ende des Programmes einmal aufgerufen wird. Dies ist hier ja nicht der Fall.</p>
<p>Spielerdatenbank.h</p>
<pre><code>#ifndef SPIELERDATENBANK_H
#define SPIELERDATENBANK_H
#include &lt;iostream&gt;

namespace Spieler{
    class Datenbank
    {
    public:
        static Datenbank* getInstance(){
            if(Instance == 0){
                Instance = new Datenbank();
            }
            return Instance;
        }

    private:
        static Datenbank* Instance;
        Datenbank(){
            std::cout &lt;&lt; &quot;Erschaffen&quot; &lt;&lt; std::endl;
        }
        ~Datenbank(){
            std::cout &lt;&lt; &quot;Zerstören&quot; &lt;&lt; std::endl;
        }
    };
    Datenbank* Datenbank::Instance(0);
}
#endif // SPIELERDATENBANK_H
</code></pre>
<p>main.h</p>
<pre><code>int main(int argc, char *argv[]){
    Spieler::Datenbank* t= Spieler::Datenbank::getInstance();
    return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Erschaffen
</code></pre>
<p>Meine Frage: Warum wird der Destruktor nicht aufgerufen? Mache ich etwas falsch oder wird der Destruktor bei einem Singleton am Ende nicht aufgerufen? Mit Ende meinte ich übrigens, wenn das Programm terminiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319709/singleton-destuktor-wird-nicht-aufgeruden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 16:04:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319709.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Aug 2013 18:58:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 18:58:37 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich habe eine Singleton Klasse geschrieben. Mein Problem ist, das der Destruktor nicht aufgerufen wird. Habe schon mal gegooglt und habe unter anderem gelesen, dass der Destruktor am Ende des Programmes einmal aufgerufen wird. Dies ist hier ja nicht der Fall.</p>
<p>Spielerdatenbank.h</p>
<pre><code>#ifndef SPIELERDATENBANK_H
#define SPIELERDATENBANK_H
#include &lt;iostream&gt;

namespace Spieler{
    class Datenbank
    {
    public:
        static Datenbank* getInstance(){
            if(Instance == 0){
                Instance = new Datenbank();
            }
            return Instance;
        }

    private:
        static Datenbank* Instance;
        Datenbank(){
            std::cout &lt;&lt; &quot;Erschaffen&quot; &lt;&lt; std::endl;
        }
        ~Datenbank(){
            std::cout &lt;&lt; &quot;Zerstören&quot; &lt;&lt; std::endl;
        }
    };
    Datenbank* Datenbank::Instance(0);
}
#endif // SPIELERDATENBANK_H
</code></pre>
<p>main.h</p>
<pre><code>int main(int argc, char *argv[]){
    Spieler::Datenbank* t= Spieler::Datenbank::getInstance();
    return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Erschaffen
</code></pre>
<p>Meine Frage: Warum wird der Destruktor nicht aufgerufen? Mache ich etwas falsch oder wird der Destruktor bei einem Singleton am Ende nicht aufgerufen? Mit Ende meinte ich übrigens, wenn das Programm terminiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349262</guid><dc:creator><![CDATA[Fettpet]]></dc:creator><pubDate>Thu, 29 Aug 2013 18:58:37 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 19:00:09 GMT]]></title><description><![CDATA[<p>Du schreibst kein delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349264</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 29 Aug 2013 19:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 19:13:05 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Du schreibst kein delete.</p>
</blockquote>
<p>Danke für deine Antwort, aber um ehrlich zu sein, ich kann mir nicht vorstellen wie dieses delete aussehen soll.<br />
Wird am Ende der main Funktion nicht für jedes noch existerende Objekt einmal ein Destruktor aufgerufen?</p>
<p>mfg<br />
Fettpet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349270</guid><dc:creator><![CDATA[Fettpet]]></dc:creator><pubDate>Thu, 29 Aug 2013 19:13:05 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 19:20:35 GMT]]></title><description><![CDATA[<p>Fettpet schrieb:</p>
<blockquote>
<p>Wird am Ende der main Funktion nicht für jedes noch existerende Objekt einmal ein Destruktor aufgerufen?</p>
</blockquote>
<p>Nein, nur für Objekte mit automatischer oder statischer Speicherdauer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349272</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 29 Aug 2013 19:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 19:25:16 GMT]]></title><description><![CDATA[<p>Implementiere den Pointer als smart-pointer, dann geht es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349273</guid><dc:creator><![CDATA[Marthog]]></dc:creator><pubDate>Thu, 29 Aug 2013 19:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 19:41:12 GMT]]></title><description><![CDATA[<p>Marthog schrieb:</p>
<blockquote>
<p>Implementiere den Pointer als smart-pointer, dann geht es.</p>
</blockquote>
<p>Danke für den Tipp, jetzt macht er genau dass, was er soll. Smart Pointer stehen auch schon seit rund einem Jahr auf meiner ToDo Liste. <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>Hier ist mal noch die Lösung:</p>
<pre><code>#ifndef SPIELERDATENBANK_H
#define SPIELERDATENBANK_H
#include &lt;iostream&gt;
#include &lt;memory&gt;

namespace Spieler{
    class Datenbank
    {
    public:
        static Datenbank* getInstance(){
            if(Instance.get() == 0){
                Instance = std::auto_ptr&lt;Datenbank&gt; (new Datenbank());
            }
            return Instance.get();
        }
        ~Datenbank(){
            std::cout &lt;&lt; &quot;Zerstören&quot;;
        }
    private:
        static std::auto_ptr&lt;Datenbank&gt; Instance;
        Datenbank(){
            std::cout &lt;&lt; &quot;Erschaffen&quot;;
        }

    };
    std::auto_ptr&lt;Spieler::Datenbank&gt; Datenbank::Instance(0);
}
#endif // SPIELERDATENBANK_H
</code></pre>
<p>mfg<br />
Fettpet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349278</guid><dc:creator><![CDATA[Fettpet]]></dc:creator><pubDate>Thu, 29 Aug 2013 19:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 19:49:03 GMT]]></title><description><![CDATA[<p>a) Wenn Smart Pointer, dann keinen deprecated auto_ptr, sondern in dem Fall unique_ptr. Maximalst noch shared_ptr, aber der passt hier nicht so gut wie unique_ptr.</p>
<p>b) Gib doch anstatt einen Zeiger eine Referenz zurück:</p>
<pre><code>static Datenbank&amp; getInstance()
{
    if(Instance.get() == 0)
    {
        Instance = std::auto_ptr&lt;Datenbank&gt; (new Datenbank());
    }
    return *Instance;
}
</code></pre>
<p>c) Wieso eigentlich einen Zeiger mit eigener Speicherverwaltung? Wieso kein richtiges Objekt?</p>
<pre><code>class Datenbank
{
public:
	static Datenbank&amp; getInstance(){
		static Datenbank Instance;
		return Instance;
	}
	~Datenbank(){
		std::cout &lt;&lt; &quot;Zerstören&quot;;
	}
private:
	Datenbank(){
		std::cout &lt;&lt; &quot;Erschaffen&quot;;
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2349280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349280</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 29 Aug 2013 19:49:03 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Thu, 29 Aug 2013 23:51:18 GMT]]></title><description><![CDATA[<p>Fettpet schrieb:</p>
<blockquote>
<p>ich habe eine Singleton Klasse geschrieben.</p>
</blockquote>
<p>Da liegt dein Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349315</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 29 Aug 2013 23:51:18 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Fri, 30 Aug 2013 06:26:17 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Fettpet schrieb:</p>
<blockquote>
<p>ich habe eine Singleton Klasse geschrieben.</p>
</blockquote>
<p>Da liegt dein Problem.</p>
</blockquote>
<p>Ich wusste das so ein Kommentar kommt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <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="😉"
    /><br />
Singeltons sind und bleiben ein anerkanntes Design Pattern und es gibt garantiert auch Fälle, wo man sie benötigt - bestimmt, denke ich. <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/2349327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349327</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 30 Aug 2013 06:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Fri, 30 Aug 2013 06:32:12 GMT]]></title><description><![CDATA[<p>Singleton ist und bleibt ein umstrittenes Designpattern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349330</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 30 Aug 2013 06:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Fri, 30 Aug 2013 07:11:00 GMT]]></title><description><![CDATA[<p>Umstritten hört sich schon besser an als &quot;Problem&quot;.</p>
<p>Der Nachteil des Singletons ist im Prinzip, dass man sehr schnell diese einzelne Instanz als Globales Gott Objekt benutzt. So wird eine hohe Kopllung der Komponenten erreicht und zusätzliche Abhängigkeiten eingebaut. Und das widerspricht der OOP sowie gutem Programmierstil.</p>
<p>Andererseits bieten sich andere Patterns (wie die 3 Factories) an, um als Singleton genutzt zu werden. Aber auch hier sollte man vorsichtig sein, denn durch eine gute Strukturierung kann trotzdem ein Singleton vermieden werden.</p>
<p>Kurzum: Singleton mal so für 'ne Übung verwenden, oder mal bei nem kleinen Projekt -&gt; ok<br />
Aber wenn's an's Eingemachte geht, Finger weg. Auch wenn die Versuchung groß ist.</p>
<p>Zum TE: Wenn du eine Datenbank damit modellierst, bedeutet das, dass diese Datenbankklasse die Verbindung zur eigentlichen Datenbank darstellt? Sprich, im Konstruktor eröffnest zu eine Verbindung zur Bank und Destruktor schließt du sie? Und das sei der Grund für ein Singleton?!</p>
<p>Weil wenn ja, dann frage dich mal, wieso das so sein sollte? Wieso soll eine Programm annähernd seine gesamte Lebensdauer eine Verbindung zu einer Datei oder Datenbank halten? Und was passiert bei Verbindungsabbrüchen? Oder bei Multithreading?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349335</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 30 Aug 2013 07:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Fri, 30 Aug 2013 17:55:31 GMT]]></title><description><![CDATA[<p>Singleton ist ein Antipattern, das nur von Leuten benutzt wird, die den Unterschied zwischen Klasse und Instanz noch nicht begriffen haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349444</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 30 Aug 2013 17:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Mon, 09 Sep 2013 19:08:59 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Zum TE: Wenn du eine Datenbank damit modellierst, bedeutet das, dass diese Datenbankklasse die Verbindung zur eigentlichen Datenbank darstellt? Sprich, im Konstruktor eröffnest zu eine Verbindung zur Bank und Destruktor schließt du sie? Und das sei der Grund für ein Singleton?!</p>
</blockquote>
<p>Genau das habe ich mit dem Singleton vor.<br />
Wie ich unschwer rauslesen konnte, scheint dies keine gute Idee zu sein. Was habt ihr für Vorschläge, für ein besseres Design?</p>
<p>mfg<br />
Fettpet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2351405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2351405</guid><dc:creator><![CDATA[Fettpet]]></dc:creator><pubDate>Mon, 09 Sep 2013 19:08:59 GMT</pubDate></item><item><title><![CDATA[Reply to Singleton Destuktor wird nicht aufgeruden on Mon, 09 Sep 2013 20:41:48 GMT]]></title><description><![CDATA[<p>Grundsätzlich kannst du dich immer fragen, welchen Vorteil dir ein Singleton gegenüber dem naheliegenden Ansatz -- normale Klasse, die nur einmal instanziiert wird -- bringt.</p>
<p>Meist läuft das auf &quot;ich muss nicht ständig Parameter übergeben&quot; aka. &quot;ist bequemer&quot; bzw. &quot;ich muss mir keine Gedanken um Abhängigkeiten machen&quot; hinaus. Und hier liegt das Problem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2351425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2351425</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 09 Sep 2013 20:41:48 GMT</pubDate></item></channel></rss>