<?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[Template-Klasse, Problem mit Vektor]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich versuche mich gerade an einer Template-Klasse, scheitere aber irgendwie hoffnungslos <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="🙂"
    /><br />
Ich arbeite mit dem Visual Studio 2008 und entsprechendem Compiler.</p>
<p>Die Klasse (alles in einem Header-File):</p>
<pre><code class="language-cpp">#pragma once

#include &lt;vector&gt;

template &lt;class T&gt;
class BBGarbageCollector
{
public:
	BBGarbageCollector(void);
	~BBGarbageCollector(void);

	void Add(T* e);
	void DeleteGarbage();

protected:
	std::vector&lt;T*&gt; m_vecGarbage;
};

template &lt;class T&gt;
BBGarbageCollector&lt;T&gt;::BBGarbageCollector(void)
{
}

template &lt;class T&gt;
BBGarbageCollector&lt;T&gt;::~BBGarbageCollector(void)
{
}

template &lt;class T&gt;
void BBGarbageCollector&lt;T&gt;::Add(T *e)
{
	m_vecGarbage.push(e);
}

template &lt;class T&gt;
void BBGarbageCollector&lt;T&gt;::DeleteGarbage()
{
	for(std::vector&lt;T*&gt;::iterator it = m_vecGarbage.begin(); it != m_vecGarbage.end(); it++)
	{
		delete it-&gt;second;
	}

	m_vecGarbage.clean();
}
</code></pre>
<p>Generiert bei der Instanzierung (hier am Beispiel von BBParticle) beim Kompiliervorgang Fehler in diesem Stil:</p>
<pre><code>1&gt;BBParticle.cpp
1&gt;d:\vs\bbce\bbgarbagecollector.h(33) : error C2039: 'push' : is not a member of 'std::vector&lt;_Ty&gt;'
1&gt;        with
1&gt;        [
1&gt;            _Ty=BBParticle *
1&gt;        ]
1&gt;        d:\vs\bbce\bbgarbagecollector.h(32) : while compiling class template member function 'void BBGarbageCollector&lt;T&gt;::Add(T *)'
1&gt;        with
1&gt;        [
1&gt;            T=BBParticle
1&gt;        ]
1&gt;        d:\vs\bbce\bbparticle.cpp(40) : see reference to class template instantiation 'BBGarbageCollector&lt;T&gt;' being compiled
1&gt;        with
1&gt;        [
1&gt;            T=BBParticle
1&gt;        ]
1&gt;BBParticleSpray.cpp
</code></pre>
<p>Das ganze verwirrt mich etwas, ich sehe meinen Fehler nicht...</p>
<p>Danke im Voraus!</p>
<p>PS: Wer den Fehler findet, darf auch meinen Coding-Stil bemängeln soviel er will xD</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237297/template-klasse-problem-mit-vektor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 12:37:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237297.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Mar 2009 20:05:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:05:17 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich versuche mich gerade an einer Template-Klasse, scheitere aber irgendwie hoffnungslos <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="🙂"
    /><br />
Ich arbeite mit dem Visual Studio 2008 und entsprechendem Compiler.</p>
<p>Die Klasse (alles in einem Header-File):</p>
<pre><code class="language-cpp">#pragma once

#include &lt;vector&gt;

template &lt;class T&gt;
class BBGarbageCollector
{
public:
	BBGarbageCollector(void);
	~BBGarbageCollector(void);

	void Add(T* e);
	void DeleteGarbage();

protected:
	std::vector&lt;T*&gt; m_vecGarbage;
};

template &lt;class T&gt;
BBGarbageCollector&lt;T&gt;::BBGarbageCollector(void)
{
}

template &lt;class T&gt;
BBGarbageCollector&lt;T&gt;::~BBGarbageCollector(void)
{
}

template &lt;class T&gt;
void BBGarbageCollector&lt;T&gt;::Add(T *e)
{
	m_vecGarbage.push(e);
}

template &lt;class T&gt;
void BBGarbageCollector&lt;T&gt;::DeleteGarbage()
{
	for(std::vector&lt;T*&gt;::iterator it = m_vecGarbage.begin(); it != m_vecGarbage.end(); it++)
	{
		delete it-&gt;second;
	}

	m_vecGarbage.clean();
}
</code></pre>
<p>Generiert bei der Instanzierung (hier am Beispiel von BBParticle) beim Kompiliervorgang Fehler in diesem Stil:</p>
<pre><code>1&gt;BBParticle.cpp
1&gt;d:\vs\bbce\bbgarbagecollector.h(33) : error C2039: 'push' : is not a member of 'std::vector&lt;_Ty&gt;'
1&gt;        with
1&gt;        [
1&gt;            _Ty=BBParticle *
1&gt;        ]
1&gt;        d:\vs\bbce\bbgarbagecollector.h(32) : while compiling class template member function 'void BBGarbageCollector&lt;T&gt;::Add(T *)'
1&gt;        with
1&gt;        [
1&gt;            T=BBParticle
1&gt;        ]
1&gt;        d:\vs\bbce\bbparticle.cpp(40) : see reference to class template instantiation 'BBGarbageCollector&lt;T&gt;' being compiled
1&gt;        with
1&gt;        [
1&gt;            T=BBParticle
1&gt;        ]
1&gt;BBParticleSpray.cpp
</code></pre>
<p>Das ganze verwirrt mich etwas, ich sehe meinen Fehler nicht...</p>
<p>Danke im Voraus!</p>
<p>PS: Wer den Fehler findet, darf auch meinen Coding-Stil bemängeln soviel er will xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686616</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:07:38 GMT]]></title><description><![CDATA[<p>meiste push_back statt push?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686617</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:12:16 GMT]]></title><description><![CDATA[<p>danke volkard!</p>
<p>zuviel java tut nicht gut <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1686619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686619</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:14:28 GMT]]></title><description><![CDATA[<p>ok, dann darf ich jetzt meckern:<br />
erstens:<br />
das void in</p>
<pre><code class="language-cpp">BBGarbageCollector(void);
</code></pre>
<p>ist uncool.</p>
<p>ups, gibt gar kein zweitens.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686621</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:17:18 GMT]]></title><description><![CDATA[<p>hm... ist ein problem, welches ich bei dem projekt sowieso habe!<br />
das ding ist schon älter. entweder implementiere ich nun alles wie begonnen ( (void), ErsterCamelCaseBuchstabeGrossStattKlein ) oder habe ein durcheinander.<br />
code aufräumen ist keine alternative, da faul.</p>
<p>und das kein zweitens nehm' ich als kompliment <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/1686623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686623</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:17:18 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:20:20 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>hm... ist ein problem, welches ich bei dem projekt sowieso habe!<br />
das ding ist schon älter. entweder implementiere ich nun alles wie begonnen ( (void), ErsterCamelCaseBuchstabeGrossStattKlein ) oder habe ein durcheinander.<br />
code aufräumen ist keine alternative, da faul.</p>
</blockquote>
<p>bist du in der lage, ein tool zu benutzen, das über alle files (void) durch () ersetzt? und dann den compiler starten und die extrem seltenen fälle heilen, wo ein (void) doch hingehört.</p>
<p>das_brot schrieb:</p>
<blockquote>
<p>und das kein zweitens nehm' ich als kompliment <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>
</blockquote>
<p>war auch genau so gemeint. <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/1686624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686624</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:20:20 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Thu, 26 Mar 2009 20:20:25 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>ups, gibt gar kein zweitens.</p>
</blockquote>
<p>Doch, zum Beispiel <code>m_vecGarbage.clean();</code> ... <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>das_brot, ich würde aufpassen, dass du nicht versuchst, Konzepte anderer Programmiersprachen 1:1 zu übertragen. In C++ gibt es eigentlich keine zentralen Garbage-Collectors, durch RAII ist eigentlich jede Klasse selber dafür zuständig, dass sie aufgeräumt ist. Container handhaben die Speicherverwaltung sowieso selbst, Smart Pointer können dich bei RAII unterstützen.</p>
<p>Als Experiment ist das natürlich okay, aber ich würde vorsichtig sein, sowas in der Praxis breit anzuwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686625</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 26 Mar 2009 20:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 12:39:40 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Doch, zum Beispiel <code>m_vecGarbage.clean();</code> ... <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>
</blockquote>
<p>ist natürlich mittlerweile ein clear() ^^</p>
<p>Wegen Sinn und Unsinn des GC: Der Code ist Teil einer Spieleengine.<br />
Da existieren nun etwa Partikel, welche als grafische Objekte durch die Spielwelt schwirren und eine Lebzeit haben. Das Partikel wird als normales Grafikobjekt animiert und merkt selbst, wenn seine Lebzeit überschritten ist. Seine Ressourcen sollen nun also wieder freigegeben werden. &quot;delete this&quot; ist kein Ansatz, weshalb es sich beim GC einträgt.<br />
Dieser wiederum löscht dann alle paar Frames die eingetragenen Objekte.</p>
<p>Ist der Begriff GC in diesem Zusammenhang unglücklich gewählt?<br />
Oder habt ihr da bessere Ansätze? Fänd' ich spannend, die zu hören!</p>
<p>//Edit:<br />
Und weis wer ein Refactoring-Tool, welches mir gleich alle Members von CamelCase nach camelCase umbenennen kann? Dann mach' ich sogar noch die (void)s im gleichen Zug weg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686907</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Fri, 27 Mar 2009 12:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 12:42:53 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>Oder habt ihr da bessere Ansätze? Fänd' ich spannend, die zu hören!</p>
</blockquote>
<p>Ich würde hier direkt STL-Container oder -Adapter verwenden.</p>
<p>Haben die Partikel alle die gleiche Lebenszeit? Falls ja, kannst du nämlich eine <code>std::queue</code> oder (um mehr Flexibilität zu haben) <code>std::list</code> bzw. <code>std::deque</code> einsetzen. Du hängst neue Partikel am Schluss an, und löschst am Anfang solange, wie das erste Element seine Lebzeit überschritten hat. Also ganz nach dem FIFO-Prinzip einer Warteschlange.</p>
<p>Falls die Zeiten unterschiedlich sind, böte sich eventuell <code>std::priority_queue</code> oder direkt ein Random-Access-Container wie <code>std::vector</code> bzw. <code>std::deque</code> an. Mit <code>std::remove_if()</code> könntest du Elemente, die tot sein müssten, nach hinten verschieben und anschliessend mit <code>erase()</code> löschen.</p>
<p>Wenn dir das ganze noch nicht ganz klar ist, frag einfach wieder. Vielleicht hilft dir auch <a href="http://www.cplusplus.com" rel="nofollow">www.cplusplus.com</a> mit der Dokumentation der oben genannten Klassen und Funktionen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1686917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686917</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Mar 2009 12:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 13:03:00 GMT]]></title><description><![CDATA[<p>Die LZ ist unterschiedlich.</p>
<p>Den Ansatz, von aussen zu überprüfen wer tot ist und danach zu löschen, habe ich wieder verworfen.<br />
Grund: Wenn ich viele Objekte habe, will ich die aus Performancegründen nicht alle paar Frames durchpollen, um dann vielleicht 0.1% der Objekte zu löschen.<br />
Deshalb liegt die Initiative beim Objekt, welches sich aktiv als Löschkandidat beim GC einträgt.</p>
<p>Macht Sinn, oder? <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/1686928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686928</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 13:07:55 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>Deshalb liegt die Initiative beim Objekt, welches sich aktiv als Löschkandidat beim GC einträgt.</p>
</blockquote>
<p>Aber woher weiss dann das Objekt, dass es gelöscht werden muss? Da musst du ja auch durchiterieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686932</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 13:19:13 GMT]]></title><description><![CDATA[<p>Okeee. Deal <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>Ich hab' sowas:</p>
<pre><code>//LZ = Laufzeit
class LZObjekt : Objekt;

Engine::Weiter()
{
  for(Objekt : AlleObjekte)
  {
    //Ist das Objekt ein LZObjekt, checkt es im Verlauf von Weiter() seine LZ und trägt sich wenn nötig im GC ein
    Objekt-&gt;Weiter();
  }

  GC-&gt;DeleteObjects();
}
</code></pre>
<p>D.h. so erledigt die Polymorphie den Check für mich, ich muss also nicht a) ein Zweites mal über alle LZObjekte iterieren (resp mache die erst im GC) oder b) in der for-Schleife auf ein LZ-Objekt prüfen.</p>
<p>=&gt; Grundsätzlich ist ja der Unterschied, dass sich das Objekt bei meinem Ansatz &quot;von innen&quot; zur Löschung vermerkt, während du lieber &quot;von aussen&quot; feststellen würdest, ob es gelöscht werden soll. Warum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686939</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 13:28:25 GMT]]></title><description><![CDATA[<p>Ich hab nicht grundsätzlich was dagegen, &quot;von innen&quot; zu löschen. Bei deinem Code frage ich mich gerade, was ist <code>AlleObjekte</code> für ein Container? Benutzt du überhaupt Standard-C++ (wegen der komischen For-Syntax)?</p>
<p>Denn das Löschen per <code>delete</code> reicht ja allein nicht, im Container <code>AlleObjekte</code> sind die Zeiger nach wie vor gespeichert. Und wie willst du die entfernen?</p>
<p>Wenn du beispielsweise eine <code>std::list</code> benutzt, kannst du auch &quot;von innen&quot; Elemente löschen. Um Genaueres zu sagen, müsste ich mehr über den zu Grunde liegenden Container wissen.</p>
<pre><code class="language-cpp">std::list&lt;Object&gt; List;

for (std::list&lt;Object&gt;::iterator i = List.begin(); i != List.end(); )
{
    i-&gt;Update();

    if (i-&gt;IsDead())
        i = List.erase(i);
    else
        ++i;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1686946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686946</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 13:35:40 GMT]]></title><description><![CDATA[<p>Ist pseudocode, ich bin auf der Arbeit, und das Ding ist zuhause.</p>
<p>Aber du hast Recht, das Problem mit den &quot;kaputten Zeigern&quot; in AlleObjekte wird mir nen Strich durch die Rechnung machen, da muss ich wohl auf die Überprüfung in der Schleife ausweichen.</p>
<p>Das andere, ursprüngliche und sinnvollere, Einsatzgebiet für den GC sind Positionen. Diese werden von mehreren Objekten gebraucht und zählen die Referenzen. Sobald sich alle Objekte &quot;abgedockt&quot; haben, lässt sich die Position vom GC löschen. Hier denke ich, mit dem GC eine gute Lösung gefunden zu haben.</p>
<p>Beides ist soweit nur graue Theorie, die Klasse und die zu verwaltenden Objekte stehen, aber zusammengefügt ist das Ding noch nicht wirklich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686950</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 13:45:09 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>Das andere, ursprüngliche und sinnvollere, Einsatzgebiet für den GC sind Positionen. Diese werden von mehreren Objekten gebraucht und zählen die Referenzen. Sobald sich alle Objekte &quot;abgedockt&quot; haben, lässt sich die Position vom GC löschen. Hier denke ich, mit dem GC eine gute Lösung gefunden zu haben.</p>
</blockquote>
<p>Hier scheint <code>shared_ptr</code> eine gute Alternative zu sein. Es kann schon sein, dass dein GC-Konstrukt in gewissen Fällen Sinn macht. Ich habe sowas nur selbst nie gebraucht und kann mir den Nutzen davon nicht wirklich vorstellen (ich hasse nebenbei Frameworks mit automatischer Referenzzählung, z.B. die GUI-Bibliothek VCF). Ich habe es lieber, ich habe mehr Kontrolle über die Lebensdauer meiner Objekte. Mit RAII, Containern und Smart Pointers werden Elemente automatisch zerstört, sobald sie aus dem Scope gehen.</p>
<p>das_brot schrieb:</p>
<blockquote>
<p>Aber du hast Recht, das Problem mit den &quot;kaputten Zeigern&quot; in AlleObjekte wird mir nen Strich durch die Rechnung machen, da muss ich wohl auf die Überprüfung in der Schleife ausweichen.</p>
</blockquote>
<p>Musst du überhaupt Zeiger in dem Container speichern? Womöglich wären direkte Objekte einfacher.</p>
<p>Es gibt viele Möglichkeiten, effizient aus Containern zu löschen. Eine verkettete Liste ist diesbezüglich wahrscheinlich am schnellsten, da du nur einmal durchiterieren musst und problemlos Elemente mitten drin löschen kannst. Vermute ich - wenn es wirklich auf Performance ankommt, sollte man einen Profiler zu Rate ziehen.</p>
<p>Was hast du jetzt für einen Containertypen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686956</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Mar 2009 13:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 14:10:30 GMT]]></title><description><![CDATA[<p>Hab' mir shared_ptr angesehen, scheint wirklich sinnvoll! Werde ich zuhause mal ausprobieren.</p>
<p>Was den Container angeht, kann ich das gerade nicht sagen (alter Code...), dürfte aber ein Vektor mit ID als Key sein (zwecks wiederfinden bestimmter Objekte, ob's nötig ist, werde ich noch rausfinden...).<br />
Pointer machen in meinem Fall Sinn, da die Objekte in verschiedenen Layern abgelegt werden (das AlleObjekte oben bezieht sich auf alle Objekte in einem bestimmten Layer), und auch zwischen diesen wechseln können sollen.</p>
<p>Danke für all den Input! Einiges werd' ich sicher übernehmen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1686980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686980</guid><dc:creator><![CDATA[das_brot]]></dc:creator><pubDate>Fri, 27 Mar 2009 14:10:30 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Klasse, Problem mit Vektor on Fri, 27 Mar 2009 14:16:04 GMT]]></title><description><![CDATA[<p>das_brot schrieb:</p>
<blockquote>
<p>Pointer machen in meinem Fall Sinn, da die Objekte in verschiedenen Layern abgelegt werden (das AlleObjekte oben bezieht sich auf alle Objekte in einem bestimmten Layer), und auch zwischen diesen wechseln können sollen.</p>
</blockquote>
<p>Genau dafür ist <code>boost::shared_ptr</code> ideal (evtl. auch <code>std::tr1::shared_ptr</code> , je nach TR1-Unterstützung). Du kannst damit in mehreren Containern Verweise auf ein einzelnes Objekt haben und dieses somit teilen (&quot;share&quot;). Sobald du den letzten Zeiger löschst, wird das Objekt automatisch zerstört und der Speicher freigegeben. Ohne dass du dich jemals darum kümmern musst.</p>
<p>das_brot schrieb:</p>
<blockquote>
<p>Danke für all den Input! Einiges werd' ich sicher übernehmen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
</blockquote>
<p>Kein Problem, das mach ich gerne. Wenn du wieder Fragen hast, stelle sie einfach! <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/1686985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1686985</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Mar 2009 14:16:04 GMT</pubDate></item></channel></rss>