<?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[Nur ein Objekt]]></title><description><![CDATA[<p>Hallo,<br />
kann man es irgendwie realisieren, dass ich eine Klasse habe und von dieser<br />
Klasse nur ein Objekt erschaffen werden darf?</p>
<p>Danke im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/206565/nur-ein-objekt</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 14:48:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/206565.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Feb 2008 13:45:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 13:45:25 GMT]]></title><description><![CDATA[<p>Hallo,<br />
kann man es irgendwie realisieren, dass ich eine Klasse habe und von dieser<br />
Klasse nur ein Objekt erschaffen werden darf?</p>
<p>Danke im Voraus!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463224</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Tue, 26 Feb 2008 13:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 13:47:13 GMT]]></title><description><![CDATA[<p>jap, Stichwort Singleton</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463228</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Tue, 26 Feb 2008 13:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 13:56:51 GMT]]></title><description><![CDATA[<p>Hab es mir mal bei Wikipedia ein bisschen durchgelesen. Das ist genau das was<br />
ich brauche <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="🙂"
    /> !!! Ich wusste gar nicht, dass man Konstruktor in private ein-<br />
packen kann! Das verhindert dann, das noch ein Objekt erzeugt wird, aber kann<br />
man dann schon noch EIN Objekt erzeugen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463239</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Tue, 26 Feb 2008 13:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 14:00:02 GMT]]></title><description><![CDATA[<p>Du hast die statische Instanz (Pointer, mit 0 initialisiert) und die statische Methode getInstance die ein neues Objekt erzeugt (mittels des privaten Konstruktors) sollte der Pointer noch 0 sein und sonst diesen nur zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463246</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 26 Feb 2008 14:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 14:02:51 GMT]]></title><description><![CDATA[<p>Wenn Du Konstruktor, Copy-Konstruktor und Zuweisungsoperator private machst, dann kann man von außen keine Objekte davon erstellen.<br />
Nur innerhalb der Klasse selbst können Objekte der Klasse erzeugt werden.<br />
Weil es aber nur eines sein soll wird auch nur eins erstellt und nach außen hin dieser, über eine Statische Methode, verfügbar gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463248</guid><dc:creator><![CDATA[Airdamn]]></dc:creator><pubDate>Tue, 26 Feb 2008 14:02:51 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 14:02:52 GMT]]></title><description><![CDATA[<p>Ah! Jetzt verstehe ich's! Danke! <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/1463249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463249</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Tue, 26 Feb 2008 14:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 15:24:22 GMT]]></title><description><![CDATA[<p>dumme Frage, ich weiß jetzt nicht, warum das schlecht sein soll, aber, warum sollte man es nicht so machen:</p>
<pre><code class="language-cpp">class Singleton
{
private:
     static Singleton * m_singletonInstance;
     Singleton() { /* do your stuff */ }
public:
     static Singleton &amp; getInstance () { return *m_singletonInstance; }
};

Singleton * Singleton::m_singletonInstance = new Singleton();
</code></pre>
<p>Ich meine, wenn man ein Singleton hat, wird man es auf jeden Fall verwenden wollen, d.h. ich sehe keine Vorzüge, die Instanz erst bei &quot;Bedarf&quot; anlegen zu müssen.<br />
Abgesehen davon ist das Erzeugen in getInstance() zum Beispiel, wenn man es nicht irgendwie absichert, nicht threadsafe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463368</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Tue, 26 Feb 2008 15:24:22 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 15:33:12 GMT]]></title><description><![CDATA[<p>Vorden schrieb:</p>
<blockquote>
<p>Ich meine, wenn man ein Singleton hat, wird man es auf jeden Fall verwenden wollen, d.h. ich sehe keine Vorzüge, die Instanz erst bei &quot;Bedarf&quot; anlegen zu müssen.</p>
</blockquote>
<p>Dein eigenes Beispiel wird ggf. auch erst mit der ersten Benutzung initialisiert (Oder nenne mir eine Stelle des C++ Standards die meiner Aussage wiederspricht). Bei globalen Variablen (die dafür aber in einer undefinierten Reihenfolge initialisiert werden) ist dies anders.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463373</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 26 Feb 2008 15:33:12 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 15:41:58 GMT]]></title><description><![CDATA[<p>Eine Frage: Wo rufst du den Destruktor auf?</p>
<p>Meyer'sche Singleton:</p>
<pre><code class="language-cpp">template &lt;class class_type&gt;
class singleton
{
    singleton(singleton const&amp;);
    singleton&amp; operator=(singleton const&amp;);
    singleton();
    ~singleton();

public:
    inline static class_type&amp; instance() { static class_type instance; return instance; }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1463380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463380</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 26 Feb 2008 15:41:58 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 15:48:18 GMT]]></title><description><![CDATA[<p>ob es bei ansi c++ jetzt wenn man es genau so schreibt erst bei der ersten benutzung initialisiert wird oder nicht ist doch egal<br />
vllt wird es in java, c++/cli, c#, etc. ja bereits sofort angelegt, das design pattern ist dasselbe</p>
<p>ich finde nichts schlechtes daran es direkt anzulegen anstatt in der GetInstance() methode ein</p>
<pre><code>if(instance == NULL)
    instance = new Singleton();
</code></pre>
<p>wenn dein singleton ein bitmap manager ist zb in einem zeichenprogramm und du ihn allein schon bei der initialisierung der GUI verwendest und sowieso 100% wenn man das programm benutzt, klar wieso nicht</p>
<p>der einzige fall wo ich die if abfrage machen würde und erst das singleton initialisieren würde wenn ich es zum ersten mal brauche wäre wenn es sich um was &quot;großes&quot; handelt</p>
<p>beispielsweise ein singleton networkking betreibt und erst zu einem server connected und eine connection aufbaut mit der er die daten hin und her schickt weil sie nicht lokal gemanaged werden</p>
<p>dann macht es natürlich sinn ihn erst anzulegen wenn man ihn benötigt</p>
<p>also bei objekten wo das anlegen viel aufwand dastellt, vllt eine statische Initialize() methode die einmal das objekt erstellt</p>
<p>es kommt immer auf den scope an in dem man sowas programmiert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463389</guid><dc:creator><![CDATA[Vevusio]]></dc:creator><pubDate>Tue, 26 Feb 2008 15:48:18 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 16:11:12 GMT]]></title><description><![CDATA[<p>naja, wenn man das Ganze in eine Art Smartpointer wrappt geht es ohne Probleme, dann wird ja der Destruktor implizit spätestens beim Schließen des Programmes aufgerufen (jedenfalls der des Smartpointers) und dieser wiederum zerstört die Singleton-Instanz. z.B.:</p>
<pre><code class="language-cpp">class SP;

class Singleton
{
    friend class SP;
    private:
       static SP singleton;
    public:
       static Singleton &amp; getInstance ();
};

class SP
{
    Singleton * instance;
public:
    SP(): instance( new Singleton() ) {}
    Singleton * operator * () { return instance; }
    ~SP()
    {
        delete instance;
    }
};

SP Singleton::singleton;
Singleton &amp; Singleton::getInstance() { return *(*singleton); }
</code></pre>
<p>So gehts auch wunderbar und der Destruktor wird sogar aufgerufen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463411</guid><dc:creator><![CDATA[Vorden]]></dc:creator><pubDate>Tue, 26 Feb 2008 16:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 16:32:30 GMT]]></title><description><![CDATA[<p>Äh, ich habe noch mal eine Frage zu den SingleTon.</p>
<p>Auf folgender Seite:<br />
<a href="http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)" rel="nofollow">http://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster)</a></p>
<p>Bei den Beispielen in C++. Wie kann ich jetzt das eine Objekt erzeugen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463424</guid><dc:creator><![CDATA[*D*]]></dc:creator><pubDate>Tue, 26 Feb 2008 16:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 16:38:12 GMT]]></title><description><![CDATA[<p>In dem du</p>
<pre><code class="language-cpp">Singleton::getInstance()
</code></pre>
<p>verwendest. Da es eine statische methode ist kannst du sie ohne Objekt verwenden.<br />
Schau auch mal hier<br />
<a href="http://www.oop-trainer.de/Themen/Singleton.html" rel="nofollow">http://www.oop-trainer.de/Themen/Singleton.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463428</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 26 Feb 2008 16:38:12 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 16:46:17 GMT]]></title><description><![CDATA[<p>Naja das der Destruktor nicht aufgerufen wird ist sowieso total schnuppe. Alle Resourcen werden bei Programmende, sofern das Betriebssystem nicht total auf den Kopp gefallen ist, zurückgegeben.<br />
Wenn man sowas als &quot;schlechten Stil&quot; bezeichnet, kann man immer noch eine DestroySingleton() Funktion machen oder anstatt new</p>
<pre><code>static singleton singleton::instance = singleton();
</code></pre>
<p>machen. Das läuft allerdings fast auf das selbe wie oben hinaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463432</guid><dc:creator><![CDATA[c++-er]]></dc:creator><pubDate>Tue, 26 Feb 2008 16:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Tue, 26 Feb 2008 19:22:45 GMT]]></title><description><![CDATA[<p>c++-er schrieb:</p>
<blockquote>
<p>Naja das der Destruktor nicht aufgerufen wird ist sowieso total schnuppe. Alle Resourcen werden bei Programmende, sofern das Betriebssystem nicht total auf den Kopp gefallen ist, zurückgegeben.</p>
</blockquote>
<p>Dies stimmt so nicht ganz, kommt immer darauf an was es für Ressourcen sind. Zumal ein new an der Stelle sowas von unnötig ist und es mit einem Objekt ohne all diese Probleme geht.</p>
<p>c++-er schrieb:</p>
<blockquote>
<p>Wenn man sowas als &quot;schlechten Stil&quot; bezeichnet, kann man immer noch eine DestroySingleton() Funktion machen oder anstatt new</p>
<pre><code>static singleton singleton::instance = singleton();
</code></pre>
<p>machen. Das läuft allerdings fast auf das selbe wie oben hinaus.</p>
</blockquote>
<p>Eben nicht. Und ja es ist &quot;schlechten Stil&quot; und auch eine DestroySingleton()-Funktion geht an dem Sinn und Zweck eines Singletons vorbei.</p>
<p>Mag es dir vielleicht kleinkariert erscheinen, wenn du wie ich an einer &quot;historisch gewachsenen Anwendung&quot; arbeitest, bist du froh möglichst viele Fallstricke zu vermeiden. Es reicht schon das noch genügend &quot;historische Altlasten&quot; in der Software sind, und durch Zeitdruck und mangelde Planung das ganze noch verschärft wird.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1463516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1463516</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 26 Feb 2008 19:22:45 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Wed, 27 Feb 2008 18:33:17 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>... geht an dem Sinn und Zweck eines Singletons vorbei.</p>
</blockquote>
<p>Dann erklär mir mal den Sinn und Zweck eines Singleton. Wenn ich nur eine Instanz haben will dann lege ich nur eine Instanz an. Deshalb ein Singleton zu benutzen ist total schwachsinnig(meine Meinung!). Außerdem bindet man sich (bei großen Projekten) mittel-/langfristig mit Singletons einen riesigen Klotz ans Bein. Man läuft einfach Gefahr das man soviel Querverstrebungen hat, dass man nicht mehr weiß wo hinten und vorne ist und dies macht die Wartung einfach ungeheuer schwierig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464277</guid><dc:creator><![CDATA[c++-er]]></dc:creator><pubDate>Wed, 27 Feb 2008 18:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Wed, 27 Feb 2008 21:30:41 GMT]]></title><description><![CDATA[<p>c++-er schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>... geht an dem Sinn und Zweck eines Singletons vorbei.</p>
</blockquote>
<p>Dann erklär mir mal den Sinn und Zweck eines Singleton.</p>
</blockquote>
<p>Mein &quot;geht am Sinn und Zweck&quot; vorbei bezieht sich auf dein DestroySingleton(). Wenn man schon ein Singelton einsetzt, so weiß man meist nicht wann man den letzten Zugriff hat. Daher ist es unsinnig sich um die Freigabe kümmern zu müssen (Sprich Fehlerhafte Implementierung des Singletons).</p>
<p>c++-er schrieb:</p>
<blockquote>
<p>Wenn ich nur eine Instanz haben will dann lege ich nur eine Instanz an. Deshalb ein Singleton zu benutzen ist total schwachsinnig(meine Meinung!).</p>
</blockquote>
<p>Gut, dann sag mir mal wie du auf diese eine Instanz zugreifen willst. Wenn du sie überall durchreichst, okay. Aber nehmen wir mal an du hast z.B. Allgemeine Einstellungen zu deiner Anwendung die nur einmal eingelesen werden müssen. Ich sehe hier eben den Sinn des Singletons das diese - bei der ersten Anfrage der Einstellung - eingelesen werden, und anschließend bereit stehen. Da die Einstellungen an mehreren Stellen verwendet werden, kann man nicht genau sagen wann sie nicht mehr verwendet werden. Ein Singleton räumt sich selber auf.</p>
<p>c++-er schrieb:</p>
<blockquote>
<p>Außerdem bindet man sich (bei großen Projekten) mittel-/langfristig mit Singletons einen riesigen Klotz ans Bein. Man läuft einfach Gefahr das man soviel Querverstrebungen hat, dass man nicht mehr weiß wo hinten und vorne ist und dies macht die Wartung einfach ungeheuer schwierig.</p>
</blockquote>
<p>Nenn mir eine sinnvolle Alternative für mein Beispiel mit den Programmeinstellungen. Eine globale Variable ist es nicht (Die hat zudem den Nachteil der ungewissen Anlagereihenfolge), die Übergabe an jedes Objekt ist es mit Sicherheit auch nicht.</p>
<p>Ja, man sollte nicht mit Singletons übertreiben. Aber einen Sinn und Zweck haben sie schon.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464410</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 27 Feb 2008 21:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Nur ein Objekt on Thu, 28 Feb 2008 07:46:12 GMT]]></title><description><![CDATA[<p>Komplett statische Klassen wären eine Möglichkeit, sind aber nicht so flexibel zu erweitern, sollte man mal mehrere Instanzen benötigen. Auch sind sie nerviger zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1464526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1464526</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 28 Feb 2008 07:46:12 GMT</pubDate></item></channel></rss>