<?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[[gelöst]Schleife geht nicht, handweg geht (C4722)]]></title><description><![CDATA[<p>Hallo,<br />
der Titel sagt wenig aus, aber irgendwie tu ich mich schwer einen Titel zu finden.<br />
Also Schritt für Schritt.<br />
Ich bau gerade eine Midi-Klasse. (Also Musik-Keyboard am Computer)<br />
Bei Midi habe ich folgt gekapselt:<br />
Midi<br />
=&gt; enthält X Ports (Eingang)<br />
=&gt; enthält X Ports (Ausgang)</p>
<p>Jeder Port enthält 16 Channel<br />
=&gt; Eingangsport also 16 EingangsChannel<br />
=&gt; Ausgangsport also 16 AusgangsChannel</p>
<p>Damit das ganze weniger Arbeit ist und auch in DLLs passt habe ich Interfaces.</p>
<p>class PortInterface<br />
class Port : virtual public PortInterface</p>
<p>class PortIn : virtual public Port<br />
class PortOut : virtual public Port</p>
<p>Natürlich werden noch mehrere Klassen geerbrt, sonst würde das mit den Interfaces wenig Sinn machen.</p>
<p>So das war der Aufbau (grob und in Auszügen) und jetzt zum Problem:</p>
<pre><code class="language-cpp">CMidiPort::~CMidiPort()
{
	ChannelCloseAll();
}

typedef size_t DHandleMidiPort;

void CMidiPort::ChannelCloseAll()
{
	/* Version 1 (geht nicht)
	for (DHandleMidiPort Pos(ChannelCount()-1); Pos&gt;=0; --Pos)
	{
		ChannelClose(Pos);
	}
	Version 2 (geht, aber schlecht): */
	ChannelClose((DHandleMidiPort)0); // Wegen Überladung mit Zeigern schnell casten
	ChannelClose(1);
	ChannelClose(2);
	ChannelClose(3);
	ChannelClose(4);
	ChannelClose(5);
	ChannelClose(6);
	ChannelClose(7);
	ChannelClose(8);
	ChannelClose(9);
	ChannelClose(10);
	ChannelClose(11);
	ChannelClose(12);
	ChannelClose(13);
	ChannelClose(14);
	ChannelClose(15);
}
</code></pre>
<p>Die Funktion ChannelCount() gibt (derzeit) immer 16 zurück. (Soll sich später ändern)</p>
<p>Wenn ich jetzt meinen Compiler anwerfe, dann klappt alles. Da ich aber später auch mal mehr als 16 Kanäle haben werde (Software-Mapper) dann würde ich gerne mit Schleife arbeiten. Also habe ich Version 1 eingetragen und promt bekomme ich den folgenden Linker-Fehler:</p>
<p><em>1&gt;u:\sdks\MySDK\src\cmidiport.cpp(34) : warning C4722: &quot;CMidiPort::~CMidiPort&quot;: Der Destruktor gibt nie Werte zurück, möglicherweise ist ein Speicherverlust aufgetreten.</em></p>
<p>Ich habe nun alle Wege verfolgt. Es ist kein exit(), kein try-catch-throw oder anderweitiges Element vorhanden, was diese Fehlermeldung rechtfertigen würde.</p>
<p>Ich hab auch die Funktion (ChannelCount()-1) schon gegen ein einfaches (15) ersetzt. Die Fehlermeldung bleibt.</p>
<p>Leider habe ich die Meldung so noch nie gehabt und die MSDN zeigt eher den Fall von &quot;unerreichbarer Code&quot; auf...Solch eine Fehlermeldung erhalte ich aber nicht.</p>
<p>Als man soll ja klare Fragen stellen:<br />
<strong>Woran kann es liegen, dass ich den Fehler C4722 erhalte?</strong><br />
Kann es an der Schleife liegen? (Was ich nicht verstehen würde, oder ich hab die absolute Blindheit)</p>
<p>Visual Studio 2008 Professional unter Windows XP und Windows 7.</p>
<p>Danke für euere Gedanken,<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291610/gelöst-schleife-geht-nicht-handweg-geht-c4722</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 15:53:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291610.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Aug 2011 20:10:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:41:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
der Titel sagt wenig aus, aber irgendwie tu ich mich schwer einen Titel zu finden.<br />
Also Schritt für Schritt.<br />
Ich bau gerade eine Midi-Klasse. (Also Musik-Keyboard am Computer)<br />
Bei Midi habe ich folgt gekapselt:<br />
Midi<br />
=&gt; enthält X Ports (Eingang)<br />
=&gt; enthält X Ports (Ausgang)</p>
<p>Jeder Port enthält 16 Channel<br />
=&gt; Eingangsport also 16 EingangsChannel<br />
=&gt; Ausgangsport also 16 AusgangsChannel</p>
<p>Damit das ganze weniger Arbeit ist und auch in DLLs passt habe ich Interfaces.</p>
<p>class PortInterface<br />
class Port : virtual public PortInterface</p>
<p>class PortIn : virtual public Port<br />
class PortOut : virtual public Port</p>
<p>Natürlich werden noch mehrere Klassen geerbrt, sonst würde das mit den Interfaces wenig Sinn machen.</p>
<p>So das war der Aufbau (grob und in Auszügen) und jetzt zum Problem:</p>
<pre><code class="language-cpp">CMidiPort::~CMidiPort()
{
	ChannelCloseAll();
}

typedef size_t DHandleMidiPort;

void CMidiPort::ChannelCloseAll()
{
	/* Version 1 (geht nicht)
	for (DHandleMidiPort Pos(ChannelCount()-1); Pos&gt;=0; --Pos)
	{
		ChannelClose(Pos);
	}
	Version 2 (geht, aber schlecht): */
	ChannelClose((DHandleMidiPort)0); // Wegen Überladung mit Zeigern schnell casten
	ChannelClose(1);
	ChannelClose(2);
	ChannelClose(3);
	ChannelClose(4);
	ChannelClose(5);
	ChannelClose(6);
	ChannelClose(7);
	ChannelClose(8);
	ChannelClose(9);
	ChannelClose(10);
	ChannelClose(11);
	ChannelClose(12);
	ChannelClose(13);
	ChannelClose(14);
	ChannelClose(15);
}
</code></pre>
<p>Die Funktion ChannelCount() gibt (derzeit) immer 16 zurück. (Soll sich später ändern)</p>
<p>Wenn ich jetzt meinen Compiler anwerfe, dann klappt alles. Da ich aber später auch mal mehr als 16 Kanäle haben werde (Software-Mapper) dann würde ich gerne mit Schleife arbeiten. Also habe ich Version 1 eingetragen und promt bekomme ich den folgenden Linker-Fehler:</p>
<p><em>1&gt;u:\sdks\MySDK\src\cmidiport.cpp(34) : warning C4722: &quot;CMidiPort::~CMidiPort&quot;: Der Destruktor gibt nie Werte zurück, möglicherweise ist ein Speicherverlust aufgetreten.</em></p>
<p>Ich habe nun alle Wege verfolgt. Es ist kein exit(), kein try-catch-throw oder anderweitiges Element vorhanden, was diese Fehlermeldung rechtfertigen würde.</p>
<p>Ich hab auch die Funktion (ChannelCount()-1) schon gegen ein einfaches (15) ersetzt. Die Fehlermeldung bleibt.</p>
<p>Leider habe ich die Meldung so noch nie gehabt und die MSDN zeigt eher den Fall von &quot;unerreichbarer Code&quot; auf...Solch eine Fehlermeldung erhalte ich aber nicht.</p>
<p>Als man soll ja klare Fragen stellen:<br />
<strong>Woran kann es liegen, dass ich den Fehler C4722 erhalte?</strong><br />
Kann es an der Schleife liegen? (Was ich nicht verstehen würde, oder ich hab die absolute Blindheit)</p>
<p>Visual Studio 2008 Professional unter Windows XP und Windows 7.</p>
<p>Danke für euere Gedanken,<br />
Stefan</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109317</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:13:58 GMT]]></title><description><![CDATA[<p>Ist Pos unsigned?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109319</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:14:31 GMT]]></title><description><![CDATA[<p>Erstmal ist es ne Warnung und kein Fehler.</p>
<p>zweitens kann size_t niemals &lt;0 werden. size_t kennt keine negativen Werte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109320</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:14:31 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:23:31 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Erstmal ist es ne Warnung und kein Fehler.</p>
</blockquote>
<p>Ich habe gelernt, dass jede Warung einen Sinn hat, sonst würde es diese nicht geben. Und Warnungen irgnorieren liegt mir aus Prinzip nicht. Ich will zumindest wissen, warum es eine Warnung gibt!</p>
<p>otze schrieb:</p>
<blockquote>
<p>zweitens kann size_t niemals &lt;0 werden. size_t kennt keine negativen Werte.</p>
</blockquote>
<p>Wie kommt ihr zwei auf negative Werte? size_t ist bei mir ein typedef auf unsigned long.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109326</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:23:31 GMT]]></title><description><![CDATA[<p>Und drittens: Hat es einen tieferen Sinn, daß die Schleife unbedingt rückwärts zählen soll? (mit der manuellen Variante zählst du auch vorwärts)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109325</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:24:39 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Wie kommt ihr zwei auf negative Werte? size_t ist bei mir ein typedef auf unsigned long.</p>
</blockquote>
<p>Also ist</p>
<pre><code>Pos&gt;=0
</code></pre>
<p>immer wahr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109327</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:24:39 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:27:03 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Und drittens: Hat es einen tieferen Sinn, daß die Schleife unbedingt rückwärts zählen soll? (mit der manuellen Variante zählst du auch vorwärts)</p>
</blockquote>
<pre><code class="language-cpp">for (size_t Pos(0); Pos&lt;CountSize(); ++Pos)
// In jedem Durchgang wird die Funktion CountSize() abgerufen

for (size_t Pos(CountSize()-1); Pos&gt;=0; --Pos)
// Funktion CountSize wird nur einmal aufgerufen
</code></pre>
<p>Also, ja, es ist eigentlich schon absicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109330</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:31:30 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Ich habe gelernt, dass jede Warung einen Sinn hat, sonst würde es diese nicht geben. Und Warnungen irgnorieren liegt mir aus Prinzip nicht. Ich will zumindest wissen, warum es eine Warnung gibt!</p>
</blockquote>
<p>Ja, aber wenn man sie nicht versteht, sollte man das Progrmam zumindest mal mit dem Debugger durchlaufen lassen um zu sehen, ob da was falsch ist. Der VC hat was Warnungen angeht nämlich auch ein paar Macken - er warnt bei völlig korrektem, validen C++.</p>
<blockquote>
<p>Also, ja, es ist eigentlich schon absicht.</p>
</blockquote>
<p>Tue nichts, was der Compiler besser kann als du. Normalerweise ist deine Aussage nämlich falsch, weil der Compiler schlau ist. Und optimiere keine einzelnen Takte in nem Destruktor. Mache da slieber dort, wo du wirklich optimieren musst, weil es für das Programm _relevant_ ist. Wieviel Code hättest du in der Zwischenzeit schreiben können, hättest du nicht &quot;optimiert&quot;?</p>
<p>Ansonsten:</p>
<pre><code class="language-cpp">size_t end = CountSize();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2109332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109332</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:30:32 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>stefanjann schrieb:</p>
<blockquote>
<p>Wie kommt ihr zwei auf negative Werte? size_t ist bei mir ein typedef auf unsigned long.</p>
</blockquote>
<p>Also ist</p>
<pre><code>Pos&gt;=0
</code></pre>
<p>immer wahr.</p>
</blockquote>
<p>Ja, klar...und folglich hab ich bei Pos=0, --Pos auch sofort wieder nen positiven Wert.</p>
<p>*fluch-auf-mich*</p>
<p>Danke euch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109334</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:30:32 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:38:29 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Tue nichts, was der Compiler besser kann als du. Normalerweise ist deine Aussage nämlich falsch, weil der Compiler schlau ist. Und optimiere keine einzelnen Takte in nem Destruktor. Mache da slieber dort, wo du wirklich optimieren musst, weil es für das Programm _relevant_ ist. Wieviel Code hättest du in der Zwischenzeit schreiben können, hättest du nicht &quot;optimiert&quot;?</p>
<p>Ansonsten:</p>
<pre><code class="language-cpp">size_t end = CountSize();
</code></pre>
</blockquote>
<p>Naja, die Funktion ChannelRemoveAll ist ja nicht explizit für den d'tor geschrieben, sondern wird unter anderem im d'tor verwendet. Im Programm wird die nach jedem Song aufgerufen, weil die Channel und Ports sich jedes Lied ändern.</p>
<p>Und wenn mal viele Songs parallel geladen und entladen werden, möchte ich schon so kompackte wie möglich programmiert haben.</p>
<p>Das ein Compiler meinen Code sowieso noch durch nen Optimizer schickt ist mir auch klar. Trotzdem sollte man sich schon gedanken machen, was man schreibt. Und da gehören Erfahrungswerte wie dieser Thread einfach mit dazu. Aus Fehlern lernt man.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109340</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:41:13 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Ja, aber wenn man sie nicht versteht, sollte man das Progrmam zumindest mal mit dem Debugger durchlaufen lassen um zu sehen, ob da was falsch ist. Der VC hat was Warnungen angeht nämlich auch ein paar Macken - er warnt bei völlig korrektem, validen C++.</p>
</blockquote>
<p>Du meinst sicherlich wie sowas wie &quot;Warnung, nicht alle Steuerpfade geben einen Wert zurück&quot; nach einen throw und wenn man ein return einfügt, dann hat man plötzlich unerreichbaren Code?</p>
<p>Ja, habe ich auch schon festgestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109342</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:47:46 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und drittens: Hat es einen tieferen Sinn, daß die Schleife unbedingt rückwärts zählen soll? (mit der manuellen Variante zählst du auch vorwärts)</p>
</blockquote>
<pre><code class="language-cpp">for (size_t Pos(0); Pos&lt;CountSize(); ++Pos)
// In jedem Durchgang wird die Funktion CountSize() abgerufen

for (size_t Pos(CountSize()-1); Pos&gt;=0; --Pos)
// Funktion CountSize wird nur einmal aufgerufen
</code></pre>
<p>Also, ja, es ist eigentlich schon absicht.</p>
</blockquote>
<p>Wie otze schon schrieb - im Zweifelsfall kannst du den Wert auch einmal berechnen lassen und dann in der Schleife darauf zugreifen. Außerdem glaube ich nicht, daß die Funktion CountSize() so komplex ist, daß sie wirklich bei jedem Aufruf die 16 Kanäle <em>zählen</em> muß. (d.h. durch Inlining und Optimierungen fliegt der Funktionsaufruf komplett weg)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109346</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:47:46 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Mon, 22 Aug 2011 20:54:48 GMT]]></title><description><![CDATA[<p>Rückwärts zu löschen ist generell gut, wenn vorwärts angelegt wird.<br />
Leider kann man dann nicht mehr so einfach eine for-Schleife mehr schreiben.<br />
Ich könnte mir aber vorstellen, daß der Compiler damit keine Probleme hat:</p>
<pre><code class="language-cpp">for (size_t Count(CountSize()); Count&gt;0; --Count)
   lösche(Count-1);
</code></pre>
<p>Wobei das fast riecht, wie</p>
<pre><code class="language-cpp">//Wenn ich groß bin, werde ich ein vector
while(CountSize())
   lösche(Count-1);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2109351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109351</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 22 Aug 2011 20:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Tue, 23 Aug 2011 06:52:59 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Rückwärts zu löschen ist generell gut, wenn vorwärts angelegt wird.<br />
Leider kann man dann nicht mehr so einfach eine for-Schleife mehr schreiben.<br />
Ich könnte mir aber vorstellen, daß der Compiler damit keine Probleme hat:</p>
<pre><code class="language-cpp">for (size_t Count(CountSize()); Count&gt;0; --Count)
   lösche(Count-1);
</code></pre>
<p>Wobei das fast riecht, wie</p>
<pre><code class="language-cpp">//Wenn ich groß bin, werde ich ein vector
while(CountSize())
   lösche(Count-1);
</code></pre>
</blockquote>
<p>Hallo,<br />
ja es it ein Vector. Allerdings macht mein Lösch-Befehl den Vector nicht kleiner. Da sonst sehr viele insert und resize benötigt würden. Die Funktion zum ChannelRemoveAll steht oft zur Verfügung und deswegen wird nur das Element darin gelöscht und der Zeiger auf 0 gesetzt.<br />
Es ist zwar eine Midi-Klasse, ich nutze diese aber auch für einen &quot;virtuellen Midiverwalter&quot; und der kann size_t Channel haben (nicht nur die 16 Standard).<br />
Bei großen Songs kann dann im Lied (wenn die Mappings sich ändern) schon einiges an Rechenleistung vergehen. Daher geht es mit dem &quot;Geruch&quot; leider nicht.</p>
<p>Aber die erste Idee ist gut.</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109451</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Tue, 23 Aug 2011 06:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Schleife geht nicht, handweg geht (C4722) on Tue, 23 Aug 2011 07:09:49 GMT]]></title><description><![CDATA[<blockquote>
<p>Da sonst sehr viele insert und resize benötigt würden.</p>
</blockquote>
<p>und? Was meinste, wie der vector resize implementiert? ein resize gibt normalerweise keinen Speicher mehr frei. Da heißt, wenn du den Vector kleiner machst, dann kostet dich das niemals etwas. musst du halt vorher mit reserve arbeiten. insert in der Mitte brauchst du wohl auch nie, also ist auch das eine O(1) Operation.</p>
<p>Eventuell sollte man dir sagen, dass iterationen gar nichts kosten. Und ich wette, dass du irgendwo Fehler machst, die sich 10000x mal stärker auf die performance auswirken.</p>
<p>Hast du überhaupt mal gemessen, oder glaubst du einfach nur, dass das auf die Performance geht? Ich würde einfahc mal vermuten, dass im Vergleich zum performance kritischen Teil (datei einlesen, verarbeiten, abspielen) dein destructor vielleicht 0.1% der Zeit einnimmt.</p>
<p>Merke: erst messen, dann optimieren. Lesbarer Code ist immer besser als getrickster Code. Lesbarer Code wird häufig auch besser vom Compiler für dich optimiert. Trickse also nur dort, wo es notwendig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2109458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2109458</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 23 Aug 2011 07:09:49 GMT</pubDate></item></channel></rss>