<?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[Fehlerbehandlung (per Referenz?)]]></title><description><![CDATA[<pre><code>double divide(int a, int b)
{
  MathError m1(&quot;Division durch 0&quot;);
  MathError m2(&quot;Nenner negativ&quot;);

  if(b == 0) throw m1;
  if(b &lt; 1) throw m2;
  return double(a/b);                
}
-------------------------------------------
try
{
  bruch = divide(zaehler, nenner);
  cout&lt;&lt; bruch;
}
catch(MathError &amp;m) &lt;----    
{
  cout&lt;&lt; m.getMessage();}
}
</code></pre>
<p>Hallo,<br />
wird (siehe Pfeil) hier die Adresse des Objekts übergeben, wenn ich den Adressoperator verwende und wenn ich ihn weg lasse eine Kopie vom Objekt?<br />
Habe gelesen, dass man es immer per Referenz übergeben soll, es funktioniert aber auch ohne!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168347/fehlerbehandlung-per-referenz</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 08:37:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168347.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Dec 2006 07:40:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehlerbehandlung (per Referenz?) on Thu, 21 Dec 2006 07:40:39 GMT]]></title><description><![CDATA[<pre><code>double divide(int a, int b)
{
  MathError m1(&quot;Division durch 0&quot;);
  MathError m2(&quot;Nenner negativ&quot;);

  if(b == 0) throw m1;
  if(b &lt; 1) throw m2;
  return double(a/b);                
}
-------------------------------------------
try
{
  bruch = divide(zaehler, nenner);
  cout&lt;&lt; bruch;
}
catch(MathError &amp;m) &lt;----    
{
  cout&lt;&lt; m.getMessage();}
}
</code></pre>
<p>Hallo,<br />
wird (siehe Pfeil) hier die Adresse des Objekts übergeben, wenn ich den Adressoperator verwende und wenn ich ihn weg lasse eine Kopie vom Objekt?<br />
Habe gelesen, dass man es immer per Referenz übergeben soll, es funktioniert aber auch ohne!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195826</guid><dc:creator><![CDATA[alexC++]]></dc:creator><pubDate>Thu, 21 Dec 2006 07:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerbehandlung (per Referenz?) on Thu, 21 Dec 2006 07:59:09 GMT]]></title><description><![CDATA[<p>throw wirft auf jeden Fall eine Kopie des lokalen Objekts (btw solltest du die Exceptions nicht &quot;auf Vorrat&quot; anlegen, das kostet nur Zeit), auf der catch-Seite kannst du nun bestimmen, wie diese Kopie entgegengenommen wird - <code>catch(MathError e)</code> erzeugt sich eine eigene Kopie, <code>catch(MathError&amp; e)</code> arbeitet mit dem von throw erzeugten Objekt.</p>
<p>(interessant wird das, wenn die Kopier-Operation der Exception teuer ist - oder wenn du das Objekt modifizieren und weiterwerfen willst)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195837</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Dec 2006 07:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerbehandlung (per Referenz?) on Thu, 21 Dec 2006 08:10:26 GMT]]></title><description><![CDATA[<p>ok, dann ist es sinnvoller den Adressoperator zu verwenden. (wegen Speicher)<br />
dann ist es doch aber keine Kopie, sondern das eigentliche Objekt oder ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195843</guid><dc:creator><![CDATA[alexC++]]></dc:creator><pubDate>Thu, 21 Dec 2006 08:10:26 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerbehandlung (per Referenz?) on Thu, 21 Dec 2006 08:22:52 GMT]]></title><description><![CDATA[<p>alexC++ schrieb:</p>
<blockquote>
<p>ok, dann ist es sinnvoller den Adressoperator zu verwenden. (wegen Speicher)</p>
</blockquote>
<p>Das ist in dem Fall kein Adressoperator, sondern eine Referenz <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="😉"
    /> Und ja, es ist sinnvoller.</p>
<blockquote>
<p>dann ist es doch aber keine Kopie, sondern das eigentliche Objekt oder ?</p>
</blockquote>
<p>Es ist nicht das Objekt m1, das du in der Funktion angelegt hast, falls du das meintest (dieses Objekt wurde beim Stack-Aufräumen zerstört - nachdem throw eine Kopie davon angelegt hat), aber zumindest ist es kein neues Objekt, das extra für deinen catch-Block angelegt werden mußte.</p>
<p>(ausführlichere Erklärungen findest du in der MSDN unter &quot;Ausnahmebehandlung&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195854</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Dec 2006 08:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerbehandlung (per Referenz?) on Thu, 21 Dec 2006 08:31:19 GMT]]></title><description><![CDATA[<p>ok, danke dir!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1195863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1195863</guid><dc:creator><![CDATA[alexC++]]></dc:creator><pubDate>Thu, 21 Dec 2006 08:31:19 GMT</pubDate></item></channel></rss>