<?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[Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird]]></title><description><![CDATA[<p>hallo zusammen. ich habe vor einiger zeit ein buch über c++ zu ende gelesen und dachte mit, dass ich als übung ein kleines konsolenspiel programmieren könnte. doch jetzt bin ich auf ein wirklich seltsames problem gestoßen.</p>
<p>ich habe eine funktion, die instanzen für asteroiden erstellt, die man mit einem raumschiff abschießen kann (ich weiß, unschlagbares konzept). rein optisch funktioniert auch alles. um zu schauen, wieviele instanzen vorhanden sind habe ich einen zähler eingebaut, der statisch ist und beim aufruf des konstruktors hochzählt und beim destruktur runterzählt. selbst wenn ich die ausgabe ständig aktualisiere und sehe, wie neue asteroiden erzeugt werden ändert sich der zählstand nicht, sondern bleibt auf 0. (die ausgabe des zählstandes wird natürlich permanent aktualisiert)</p>
<p>was mir noch auffiel ist, dass in der zeile:</p>
<p>CAsteroid tempAsteroid(&amp;render);</p>
<p>der name der instanz rot markiert ist. ich verwende msvc6 und visual assist x. rot werden normalerweise nur funktionen angezeigt, instanzen jedoch grau. ich habe auch geschaut, dass ich sicher keine funktion mit diesem name habe.</p>
<p>ich hoffe, jemand kann mir sagen, was hier schiefläuft. ich habe jetzt zwei tage lang jede zeile nochmal durchgeschaut und geändert. nichts hilft.</p>
<p>vielen dank schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198046/instanz-wird-erzeugt-ohne-dass-der-konstruktor-aufgerufen-wird</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 20:28:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198046.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Nov 2007 16:43:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 16:43:41 GMT]]></title><description><![CDATA[<p>hallo zusammen. ich habe vor einiger zeit ein buch über c++ zu ende gelesen und dachte mit, dass ich als übung ein kleines konsolenspiel programmieren könnte. doch jetzt bin ich auf ein wirklich seltsames problem gestoßen.</p>
<p>ich habe eine funktion, die instanzen für asteroiden erstellt, die man mit einem raumschiff abschießen kann (ich weiß, unschlagbares konzept). rein optisch funktioniert auch alles. um zu schauen, wieviele instanzen vorhanden sind habe ich einen zähler eingebaut, der statisch ist und beim aufruf des konstruktors hochzählt und beim destruktur runterzählt. selbst wenn ich die ausgabe ständig aktualisiere und sehe, wie neue asteroiden erzeugt werden ändert sich der zählstand nicht, sondern bleibt auf 0. (die ausgabe des zählstandes wird natürlich permanent aktualisiert)</p>
<p>was mir noch auffiel ist, dass in der zeile:</p>
<p>CAsteroid tempAsteroid(&amp;render);</p>
<p>der name der instanz rot markiert ist. ich verwende msvc6 und visual assist x. rot werden normalerweise nur funktionen angezeigt, instanzen jedoch grau. ich habe auch geschaut, dass ich sicher keine funktion mit diesem name habe.</p>
<p>ich hoffe, jemand kann mir sagen, was hier schiefläuft. ich habe jetzt zwei tage lang jede zeile nochmal durchgeschaut und geändert. nichts hilft.</p>
<p>vielen dank schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404979</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 16:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 16:59:43 GMT]]></title><description><![CDATA[<p>code</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404986</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 17 Nov 2007 16:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 17:01:06 GMT]]></title><description><![CDATA[<p>Vorweg: Ein bisschen Code schadet fast nie. <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>
<pre><code class="language-cpp">CAsteroid tempAsteroid(&amp;render);
</code></pre>
<p>Das sieht doch nach dem Aufruf eines benutzerdefinierten Konstruktors aus; und das ist sehr wohl ein Funktionsaufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404987</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Sat, 17 Nov 2007 17:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 18:10:27 GMT]]></title><description><![CDATA[<p>Ich geb ne runde Kristallkugeln *fg*</p>
<p>So kann dir keiner helfen^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405017</guid><dc:creator><![CDATA[isiprimax]]></dc:creator><pubDate>Sat, 17 Nov 2007 18:10:27 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 18:24:15 GMT]]></title><description><![CDATA[<p>ich hoffe, der code wird auch als solcher angezeigt</p>
<pre><code class="language-cpp">void CGame::spawnAsteroids(void)
{
        // drawarea ist eine instanz einer klasse, die für das rendern 
        // verantwortlich ist
	CAsteroid tempAsteroid(&amp;DrawArea);

	m_lAsteorid.push_back(tempAsteroid); 
}
</code></pre>
<p>hier wird also ein asteroid erzeugt.</p>
<pre><code class="language-cpp">CAsteroid::CAsteroid(CDrawEngine* de)
{
        // zähler für instanzen 
	CAsteroid::m_instanceCntr++;

	// zeiger übergeben
	m_pDrawArea = de;

	// ein asteroid hat ein leben
	addLives(1);

	// einen zufälligen spawnpoint festlegen
		m_fPosX = (float)((rand() % (m_pDrawArea-&gt;m_screenWidth - 2))+    1);
		m_fPosY = 1;

	m_pDrawArea-&gt;drawSprite(m_index, (int)(m_fPosX), (int)(m_fPosY));
}
</code></pre>
<p>und hier noch ein ausschnitt aus der updatefunktion, die die asteroiden bewegt</p>
<pre><code class="language-cpp">if (m_lAsteorid.empty() == false)
	{
		// jeden asteroid abfragen
		for (Itr = m_lAsteorid.begin(); Itr != m_lAsteorid.end(); ++Itr)
		{
                         // diese funktion bewegt den asteroid weiter
			(Itr)-&gt;updateAsteroid();

                        // wen der asteroid tot ist...
			if ((Itr)-&gt;isAlive() == false)
                                // ...aus der liste entfernen	
				Itr = m_lAsteorid.erase(Itr);

		}
	}
</code></pre>
<p>und hier noch der destruktor des sprites</p>
<pre><code class="language-cpp">CAsteroid::~CAsteroid(void)
{
	CAsteroid::m_instanceCntr--;
	m_pDrawArea-&gt;eraseSprite(m_fPosX, m_fPosY);
}
</code></pre>
<p>also wie schon gesagt, der zähler funktioniert nicht und wenn ich in den konstruktor etwas einbaue wie<br />
cout &lt;&lt; &quot;Konstruktor aufgerufen&quot;;<br />
dann erscheint auch das nicht. das programm schein meinen konstruktor einfach zu übersehen, obwohl alles richtig in der headerdatei angegeben ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405023</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 18:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 18:26:03 GMT]]></title><description><![CDATA[<p>und die Klassendefinition?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405024</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 17 Nov 2007 18:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 18:31:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifndef ASTEROID_H
#define ASTEROID_H

#include &quot;Sprite.h&quot;

class CAsteroid : public CSprite
{
public:
		 CAsteroid(CDrawEngine* de);
		 ~CAsteroid(void);
	void updateAsteroid(void);

	static int m_instanceCntr;

private:
	bool checkCollision(int x, int y);

};

#endif
</code></pre>
<p>meinst du das hier?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405027</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 18:31:52 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 18:41:06 GMT]]></title><description><![CDATA[<p>Schonmal ein komplettes rebuild gemacht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405033</guid><dc:creator><![CDATA[lolz_ausgeloggt]]></dc:creator><pubDate>Sat, 17 Nov 2007 18:41:06 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 18:46:25 GMT]]></title><description><![CDATA[<p>sorry, da bin ich wohl noch zu sehr n neuling. was istn rebuild?? <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="😃"
    /><br />
alles auseinandernehmen und neu zusammenbauen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405038</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 18:46:25 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 19:15:08 GMT]]></title><description><![CDATA[<p>&quot;CAsteroid::m_instanceCntr++;&quot;<br />
-&gt; Nimm bei diesen Aufrufen mal den Klassenname und den Bereichsoperator weg, sodass daraus &quot;m_instanceCntr++;&quot; wird.<br />
Zu deinem anderem Problem: Bist du dir sicher, dass du den Namespace &quot;std&quot; irgendwie zugänglich gemacht hast in der Implementationsdatei für den Konstruktor? Also über &quot;using namespace std;&quot; oder &quot;using std::cout&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405050</guid><dc:creator><![CDATA[moagnus]]></dc:creator><pubDate>Sat, 17 Nov 2007 19:15:08 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 19:26:39 GMT]]></title><description><![CDATA[<p>was passiert, wenn ein CAsteroid kopiert wird, also z.B.:</p>
<pre><code class="language-cpp">CAsteroid asteroid1(&amp;DrawArea);
CAsteroid asteroid2(asteroid1);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1405054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405054</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 17 Nov 2007 19:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 19:32:43 GMT]]></title><description><![CDATA[<p>habs gerade versucht, hat aber keinen unterschied gemacht. ich habe noch ein paar dinge geändert und anscheinend wurde nicht richtig erkannt, wann ein asteroid tot ist. er verschwand zwar richtig aus der console, jedoch schien seine instanz weiterzuleben. der zähler zählt jetzt also runter und ich bekomme einen negativen zählwert.<br />
das ist jetzt wirklich seltsam, da der konstruktor ja zwangsläufig beim entstehen eines asteroiden aufgerufen werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405057</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 19:32:43 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 19:44:08 GMT]]></title><description><![CDATA[<p>also das peoblem kann jetzt nurnoch bei<br />
m_instanceCntr++;<br />
liegen. der konstruktor muss nämlich zwangsweise funktionieren, da sonst ein asteroid nicht einen zufälligen spawnpunkt hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405061</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 19:44:08 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 20:03:44 GMT]]></title><description><![CDATA[<p>CAsteroid hat zwei Konstruktoren, nur einer davon ändert Wert von m_instanceCntr (und ob du nun m_instanceCntr oder CAsteroid::m_instanceCntr oder this-&gt;m_instanceCntr etc. schreibst, ist völlig irrelevant).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405066</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 17 Nov 2007 20:03:44 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 20:23:44 GMT]]></title><description><![CDATA[<p>ich habe jetzt auf genau die selbe weise einen statischen zähler für CSprite instanzen gemacht, da CSprite ja die basisklasse eines asteroiden ist. und hier wird tatsächlich auch hochgezählt.<br />
der konstruktor von CAsteroid muss aber wie schon gesagt aufgerufen werden, denn sonst würden die asteroiden nicht angezeigt werden, da der instanz der pointer auf die klasse zum rendern fehlen würde...<br />
ich habe auch das hochzählen für die asteroidenklasse an jede nur erdenkliche stelle hingepackt. einmal sogar in eine funktion, die vom konstruktor aufgerufen wird. alles schient zu funktionieren, bis auf diese eine programmzeile, bei der man doch kaum etwas falsch machen kann.<br />
wirklich seltsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405074</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 20:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 20:46:02 GMT]]></title><description><![CDATA[<p>Wie erzeugst du denn deine Asteroiden?</p>
<p>Ist die statische Varibale initialisiert?</p>
<p>/edit/<br />
erste Frage nehme ich zurück. Hab es gerade entdeckt <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/1405079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405079</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Sat, 17 Nov 2007 20:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 21:38:06 GMT]]></title><description><![CDATA[<p>das steht in der asteroid.cpp</p>
<pre><code class="language-cpp">int CAsteroid::sm_instanceCntr = 0;
</code></pre>
<p>scheint ja auch zu funktionieren. der zähler steht wie gewollt zu beginn auf 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405098</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 21:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 21:50:04 GMT]]></title><description><![CDATA[<p>Hm, verzwicktes Problemchen. <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>Was passiert wenn du die Syntax leicht abänderst, also statt</p>
<pre><code>CAsteroid tempAsteroid(&amp;render);
</code></pre>
<pre><code>CAsteroid tempAsteroid = CAsteroid(&amp;render);
</code></pre>
<p>verwendest?</p>
<p>Nur als Test, ob zumindest die rote Kennzeichnung als Funktion verschwindet... *grübel*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405102</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Sat, 17 Nov 2007 21:50:04 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 21:58:43 GMT]]></title><description><![CDATA[<p>leider keine besserung. die rote markierung ist übrigends doch so richtig. ich hab es nochmal an einem einfachen beispiel getestet. wenn sich jemand wundert, warum manche namen sich im code ändern, dann liegt das daran, dass ich einiges zur bessren übersicht geändert habe. an der schreibweise kann das problem aber kaum liegen, sonst würde ja der compiler etwas anzeigen.</p>
<p>ich glaube ich werds wohl so hinnehmen müssen. solange der rest in den funktionen wie erwartet funktioniert ist das spiel ja funktionsfähig.</p>
<p>danke für euer bemühen <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/1405103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405103</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 21:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 22:03:46 GMT]]></title><description><![CDATA[<p>Ah, jetzt ...</p>
<p>Du erzeugst ja ein Objekt, dass nicht lange erhalten bleibt. Das Schieben in den Container wird ja mit dem Copy-Konstruktor erledigt. D.h. das Objekt wird gleich wieder gelöscht. Könnte es daran liegen?</p>
<p>Wenn ja, hätte camper das Problem eigentlich schon erwähnt. <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>/edit/<br />
Der negative Zähler lässt sich dadurch erklären, dass der Destruktor die Objekte im Container runterzählt, die der Copy-Konstruktor nicht hochgezählt hat.</p>
<p>Wenn es das auch nicht ist, gebe ich auch auf. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <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/1405105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405105</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Sat, 17 Nov 2007 22:03:46 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 22:01:19 GMT]]></title><description><![CDATA[<p>hmmm. erscheint mir nicht schlüssig. der zähler ist ja statisch und bleibt somit erhalten selbst wenn die instanz zerstört wird.<br />
außerdem dürfte dann auch nicht das herunterzählen funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405108</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sat, 17 Nov 2007 22:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sat, 17 Nov 2007 22:18:31 GMT]]></title><description><![CDATA[<p>Puh! Zu schnell für mich.</p>
<p>Folgendes könnte passieren:</p>
<p>Der Konstruktor zählt hoch.<br />
Das Objekt kommt in den Container mit dem Copy-Konstruktor.<br />
Der Destruktor zählt runter, weil das Objekt ja nur lokal gültig ist und beim Verlassen der Methode zerstört wird, d.h. die Variable m_instanceCntr bleibt unverändert.</p>
<p>Wird das Objekt im Container zerstört zählt der Destruktor nochmal runter.</p>
<p>/edit/<br />
Am Quellcode verdeutlicht:</p>
<pre><code class="language-cpp">void CGame::spawnAsteroids(void)
{
        // drawarea ist eine instanz einer klasse, die für das rendern
        // verantwortlich ist
        // hier ist m_instanceCntr noch 0
    CAsteroid tempAsteroid(&amp;DrawArea); 
        // nun ist m_instanceCntr 1
    m_lAsteorid.push_back(tempAsteroid);
        // für das Objekt im Container bleibt m_instanceCntr unverändert, 
        // da der Copy-Konstruktor wahrscheinlich m_instanceCntr nicht ändert

       // m_instanceCntr wir wieder auf 0 gesetzt, 
       // da tempAsteroid hier zerstört wird
       // und es somit zum Aufruf des Destruktors kommt
}
</code></pre>
<p>Irgendwann später im Quellcode wird auch das Objekt im Container m_lAsteorid zerstört, was zum Destruktoraufruf führt und dazu, dass m_instanceCntr runtergezählt und somti negativ wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405110</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Sat, 17 Nov 2007 22:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sun, 18 Nov 2007 02:25:44 GMT]]></title><description><![CDATA[<p>OMG sowas steppt man im Debugger durch wenn man es wissen will, und wenn man aus welchem Grund auch immer keinen Debugger verwenden kann (DirectDraw Fullscreen oder was auch immer), dann verwendet man Debug Traces oder Logfiles (umständlicher, führt aber sicher schneller zu einem Ergebnis als hier Tagelang rumzudiskutieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405144</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 18 Nov 2007 02:25:44 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sun, 18 Nov 2007 12:23:50 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>OMG ...</p>
</blockquote>
<p>Na, das ist doch kein Grund das höchste &quot;Metaobjekt&quot; anzurufen. <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>
<p>Du hast natürlich Recht, der Debugger wäre die schnellste Methode gewesen. Wenn ich das richtig sehe, hat camper die Lösung auch schon nach ca. 3 Stunden ins Forum gestellt. Leider zeigte sich der &quot;Patient&quot; uneinsichtig, was bis zur Stunde anhält.</p>
<p>t512 schrieb:</p>
<blockquote>
<p>hmmm. erscheint mir nicht schlüssig. ...</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1405254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405254</guid><dc:creator><![CDATA[vic1986]]></dc:creator><pubDate>Sun, 18 Nov 2007 12:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sun, 18 Nov 2007 13:57:59 GMT]]></title><description><![CDATA[<p>Iich würd sagen du haust mal nen Copy- ctor in dein code, welcher auch den instanzenzähler hochzählt.. bei der kopie in den containert bleibt der wert unverändert... wie schon erwähnt wurde...</p>
<p>1. Erezugen (Zähler++)<br />
2. Kopie in den Container (passiert nicht mit zähler)<br />
3. zestörung nach kopie (Zähler--)</p>
<p>-- objekt lebt</p>
<p>4. obekt wird ausm container gelöscht (Zähler--)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405304</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sun, 18 Nov 2007 13:57:59 GMT</pubDate></item><item><title><![CDATA[Reply to Instanz wird erzeugt, ohne dass der Konstruktor aufgerufen wird on Sun, 18 Nov 2007 15:56:46 GMT]]></title><description><![CDATA[<p>ok, das erscheint mir jetzt schlüssig. ich habe wohl nicht gleich verstanden, was camper da gemeint hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405386</guid><dc:creator><![CDATA[t512]]></dc:creator><pubDate>Sun, 18 Nov 2007 15:56:46 GMT</pubDate></item></channel></rss>