<?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[Initialisierungen außerhalb des Cons? Exceptions sind &amp;quot;overhead&amp;quot;?]]></title><description><![CDATA[<p>Ich habe mir ein bissl die <a href="http://developer.bada.com/apis/docs/commonpage.do?menu=MC01010300&amp;mtb1=&amp;mtb2=" rel="nofollow">Tutorials zu bada</a> angeschaut. Da bada C++ zum erstellen von Anwendungen benutzt und ich persönlich nicht sehr verdraut bin mit C++ habe ich ein paar kurze Fragen:</p>
<ol>
<li>Ist zu empfehlen Initialisierungen von Member-Instanzen (also Objekte die einer Klasse gehören) NICHT im Konstruktor vorzunehmen, da dadurch leaked Objekte entstehen können?<br />
Beispiel:</li>
</ol>
<pre><code class="language-cpp">class Blub {
   SomeClass *s1;
   SomeClass *s2;
   public:
      Blub() {
         s1 = new SomeClass();
         s2 = new SomeClass(); // Out-of-memory exception
      }
}
</code></pre>
<p>So, nun will man sich hiervon ein Objekt anlegen, dabei passiert es das der speicher alle geht und das Objekt einen inkosistenten Zustand annimmt: Ein Objekt für s1 wurde erzeugt, aber löschen kann man es nicht mehr.</p>
<p>Also wird vorgeschlagen derartige Initialisierungen außerhalb von Konstruktoren , in gewöhnlichen Methoden zu machen.<br />
Ist das wirklich der beste Weg? Imo &quot;etwas&quot; umständlich.</p>
<ol start="2">
<li>Außerdem wird gesagt das C++-Exceptions zu viele Ressourcen benötigen (zumindest für die Hardware eines normales Handies):</li>
</ol>
<blockquote>
<p>Samsung bada uses error results instead of C++ exceptions. C++ exceptions require too large of a runtime for resource-constrained devices and incure too much overhead</p>
</blockquote>
<p>(Fundamentals - Seite 9)<br />
Ist das wirklich wahr? Ich mein Android setzt auf eine eigene VM (Dalvik VM) und benutzt in dieser Java-Exceptions, und das läuft ebenfalls.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/256491/initialisierungen-außerhalb-des-cons-exceptions-sind-quot-overhead-quot</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 06:22:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/256491.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Dec 2009 18:21:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierungen außerhalb des Cons? Exceptions sind &amp;quot;overhead&amp;quot;? on Sun, 13 Dec 2009 18:21:50 GMT]]></title><description><![CDATA[<p>Ich habe mir ein bissl die <a href="http://developer.bada.com/apis/docs/commonpage.do?menu=MC01010300&amp;mtb1=&amp;mtb2=" rel="nofollow">Tutorials zu bada</a> angeschaut. Da bada C++ zum erstellen von Anwendungen benutzt und ich persönlich nicht sehr verdraut bin mit C++ habe ich ein paar kurze Fragen:</p>
<ol>
<li>Ist zu empfehlen Initialisierungen von Member-Instanzen (also Objekte die einer Klasse gehören) NICHT im Konstruktor vorzunehmen, da dadurch leaked Objekte entstehen können?<br />
Beispiel:</li>
</ol>
<pre><code class="language-cpp">class Blub {
   SomeClass *s1;
   SomeClass *s2;
   public:
      Blub() {
         s1 = new SomeClass();
         s2 = new SomeClass(); // Out-of-memory exception
      }
}
</code></pre>
<p>So, nun will man sich hiervon ein Objekt anlegen, dabei passiert es das der speicher alle geht und das Objekt einen inkosistenten Zustand annimmt: Ein Objekt für s1 wurde erzeugt, aber löschen kann man es nicht mehr.</p>
<p>Also wird vorgeschlagen derartige Initialisierungen außerhalb von Konstruktoren , in gewöhnlichen Methoden zu machen.<br />
Ist das wirklich der beste Weg? Imo &quot;etwas&quot; umständlich.</p>
<ol start="2">
<li>Außerdem wird gesagt das C++-Exceptions zu viele Ressourcen benötigen (zumindest für die Hardware eines normales Handies):</li>
</ol>
<blockquote>
<p>Samsung bada uses error results instead of C++ exceptions. C++ exceptions require too large of a runtime for resource-constrained devices and incure too much overhead</p>
</blockquote>
<p>(Fundamentals - Seite 9)<br />
Ist das wirklich wahr? Ich mein Android setzt auf eine eigene VM (Dalvik VM) und benutzt in dieser Java-Exceptions, und das läuft ebenfalls.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822077</guid><dc:creator><![CDATA[LeggaLasagne]]></dc:creator><pubDate>Sun, 13 Dec 2009 18:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungen außerhalb des Cons? Exceptions sind &amp;quot;overhead&amp;quot;? on Sun, 13 Dec 2009 18:36:32 GMT]]></title><description><![CDATA[<p>Wenn man die Ressourcen nicht wie hier einzeln irgendwie verwaltet, sondern mittels <a href="http://de.wikipedia.org/wiki/Ressourcenbelegung_ist_Initialisierung" rel="nofollow">RAII</a>, dann ist das kein Problem, da sich dann alles von selbst aufräumt, wenn eine Exception geworfen wird.</p>
<p>Ja, exception haben einen gewissen Overhead (wenn sie gewofen werden). Aber wie relevant das ist kommt wahrscheinlich auf die Device an, obwohl ich es mir nur schwer vorstellen kann, dass allzu schlimm sein sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822079</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822079</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Dec 2009 18:36:32 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungen außerhalb des Cons? Exceptions sind &amp;quot;overhead&amp;quot;? on Sun, 13 Dec 2009 22:16:01 GMT]]></title><description><![CDATA[<p>Was passiert denn normalerweise wenn nicht genug Speicher zur Vefügung steht?<br />
Ich dachte eigentlich das dann einfach null zurück gegeben wird und man es somit im Konstruktur bemerken kann um dann s1 wieder zu löschen?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822143</guid><dc:creator><![CDATA[LeggaLasagne]]></dc:creator><pubDate>Sun, 13 Dec 2009 22:16:01 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungen außerhalb des Cons? Exceptions sind &amp;quot;overhead&amp;quot;? on Sun, 13 Dec 2009 22:43:43 GMT]]></title><description><![CDATA[<p>Normalerweise nicht:<br />
<a href="http://www.cplusplus.com/reference/std/new/operator%20new/" rel="nofollow">http://www.cplusplus.com/reference/std/new/operator new/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1822154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822154</guid><dc:creator><![CDATA[wx++]]></dc:creator><pubDate>Sun, 13 Dec 2009 22:43:43 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungen außerhalb des Cons? Exceptions sind &amp;quot;overhead&amp;quot;? on Mon, 14 Dec 2009 18:21:14 GMT]]></title><description><![CDATA[<p>LeggaLasagne schrieb:</p>
<blockquote>
<p>Was passiert denn normalerweise wenn nicht genug Speicher zur Vefügung steht?<br />
Ich dachte eigentlich das dann einfach null zurück gegeben wird und man es somit im Konstruktur bemerken kann um dann s1 wieder zu löschen?!</p>
</blockquote>
<p>Du müsstest jede Speicheranforderung in einen try/catch Block packen, alles was bisher angelegt wurde (der Speicher des werfenden news wird automatisch freigegeben) wieder löschen und die Ausnahme weiterwerfen, was natürlich sehr aufwendig ist. Die Arbeit kannst du leider nicht den Destruktor machen lassen, weil der für nicht korrekt erzeugte Objekte nihct aufgerufen wird.<br />
Besser Du packst die Zeiger direkt in sog. smart pointer oder verzichtest möglichst ganz auf dynamische Erzeugung. Was spricht gegen:</p>
<pre><code class="language-cpp">class Blub {
   SomeClass s1,s2;
   public:
      Blub() 
         : s1(),s2()
      {}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1822454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1822454</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Mon, 14 Dec 2009 18:21:14 GMT</pubDate></item></channel></rss>