<?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[throw im konsruktor]]></title><description><![CDATA[<p>wie oben schon beschrieben, habe ich ein problem mit dem throw. es steht im konstruktor und ist eben nur da sinnvoll. um eine exception abzufangen müsste ich ein objekt der klasse ja im try block deklarieren, kann dann aber nachher nicht mehr darauf zugreifen. gibt es eine einfache möglichkeit sowohl den throw-ausdruck im konstruktor stehen zu lassen und gleichzeitig aber das objekt so zu deklarieren dass man die exception abfangen kann(ohne es als statisch oder so zu deklarieren)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/178139/throw-im-konsruktor</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 17:11:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/178139.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2007 21:53:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to throw im konsruktor on Sat, 07 Apr 2007 21:53:35 GMT]]></title><description><![CDATA[<p>wie oben schon beschrieben, habe ich ein problem mit dem throw. es steht im konstruktor und ist eben nur da sinnvoll. um eine exception abzufangen müsste ich ein objekt der klasse ja im try block deklarieren, kann dann aber nachher nicht mehr darauf zugreifen. gibt es eine einfache möglichkeit sowohl den throw-ausdruck im konstruktor stehen zu lassen und gleichzeitig aber das objekt so zu deklarieren dass man die exception abfangen kann(ohne es als statisch oder so zu deklarieren)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261432</guid><dc:creator><![CDATA[jimmy3]]></dc:creator><pubDate>Sat, 07 Apr 2007 21:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sat, 07 Apr 2007 22:20:19 GMT]]></title><description><![CDATA[<p>wenn du im konstruktor die exception wirfst, hat die konstruktion nicht funktioniert.<br />
du willst doch kein totes objekt fleddern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261440</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 07 Apr 2007 22:20:19 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sat, 07 Apr 2007 22:29:52 GMT]]></title><description><![CDATA[<p>jimmy3 schrieb:</p>
<blockquote>
<p>...müsste ich ein objekt der klasse ja im try block deklarieren, kann dann aber nachher nicht mehr darauf zugreifen....</p>
</blockquote>
<p>Rrrrrischtisch !!!<br />
Konnte das Objekt nicht erzeugt werden, sollte man auch nicht drauf zugreifen ... <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 />
Ich sehe 2 Möglichkeiten: Entweder fasst Du den try-Block weiter, so dass er auch die nachfolgende Funktionalität (die dann das Objekt nutzt) umfasst, oder Du nutzt Pointer:</p>
<pre><code class="language-cpp">MyClass *c = 0;

try {
   c = new MyClass(1);
}
catch(unable_to_construct_MyClass_exception&amp; e) {
   c = new MyClass(2); // vielleicht klappt's ja mit der 2
   // Falls nicht klappt, Fliegt halt wieder eine exception und dann geht's eben &quot;raus hier&quot;
}
c-&gt;useMyClass();
... 

// irgendwo später
delete c;
</code></pre>
<p>Das lohnt sich aber nur, wenn man wirklich so einen Retry (der auch eine Menge Aufregung verursachen kann) braucht.</p>
<p>Insgesamt würde ich eher Ersteres machen:</p>
<pre><code class="language-cpp">try {
   MyClass c(1);
   c.useMyClass();
}
catch(unable_to_construct_MyClass_exception&amp; e) {
   // Hier hat's eben nicht geklappt, aber es wurde eben auch nichts gemacht mit dem &quot;ungültigen Objekt&quot;
}
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261445</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 07 Apr 2007 22:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sat, 07 Apr 2007 22:30:42 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>wenn du im konstruktor die exception wirfst, hat die konstruktion nicht funktioniert.</p>
</blockquote>
<p>der konstruktor benötigt mehrere parameter, da er wiederum eine winsock funktion aufruft die eben diese verwendet. da der konstruktor ja keinen rückgabewert hat sollte ein runtime_error signalisieren, dass die funktion fehlgeschlagen ist.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>du willst doch kein totes objekt fleddern?</p>
</blockquote>
<p>kann ich dir nur sagen wenn du mir sagst was du mit dem fleddern meinst <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/1261446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261446</guid><dc:creator><![CDATA[jimmy3]]></dc:creator><pubDate>Sat, 07 Apr 2007 22:30:42 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sat, 07 Apr 2007 22:41:31 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Rrrrrischtisch !!!<br />
Konnte das Objekt nicht erzeugt werden, sollte man auch nicht drauf zugreifen ... <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>
</blockquote>
<p>mit den parametern die ich übergebe kann das objekt immer erzeugt werden, allerdings verliert es ja dann ausserhalb des try blocks seine gültigkeit auch wenn es innerhalb ohne probleme erzeugt werden konnte.</p>
<p>zu 1: das objekt enthält infos die im hintergrund stehn und auf die ab und zu zugegriffen wird, diese möglichkeit fällt also weg es sei denn der komplette code steht im try block.</p>
<p>zu 2: retry brauche ich auch nicht aber das mit dem dynamischen allokieren ist hier wohl die einzige lösung.</p>
<p>danke euch soweit mal <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/1261448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261448</guid><dc:creator><![CDATA[jimmy3]]></dc:creator><pubDate>Sat, 07 Apr 2007 22:41:31 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sat, 07 Apr 2007 22:50:06 GMT]]></title><description><![CDATA[<p>Zeig mal deinen genauen Code, ich rieche einen Designfehler <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>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261451</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 07 Apr 2007 22:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sun, 08 Apr 2007 00:35:32 GMT]]></title><description><![CDATA[<p>jimmy3 schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>wenn du im konstruktor die exception wirfst, hat die konstruktion nicht funktioniert.</p>
</blockquote>
<p>der konstruktor benötigt mehrere parameter, da er wiederum eine winsock funktion aufruft die eben diese verwendet. da der konstruktor ja keinen rückgabewert hat sollte ein runtime_error signalisieren, dass die funktion fehlgeschlagen ist.</p>
</blockquote>
<p>eben nicht.<br />
ich nehme mal an, die klasse heißt Socket.<br />
und dem ctor übergibst du hostname und port. der ctor muss alles machen, von der namensauflösung bis zum connecten. wenn nur eines davon nicht klappt, wirfst du eine exception. und das konstruieren des sockets hat nicht funktioniert.<br />
soweit ist doch alles in butter.</p>
<pre><code class="language-cpp">try{
   Socket s(&quot;ftp.volkard.de&quot;,21);
   //hier lande ich nur, wenn der ctor keine exception warf
   s.send(&quot;cd /www&quot;);
   ...
}catch(MyException&amp; e){
   if(e.m_error==1) cout&lt;&lt;&quot;konnte namen nicht auflösen\n&quot;;
   else if(e.m_error==2) cout&lt;&lt;&quot;konnte nicht connecten\n&quot;;
   else cout&lt;&lt;&quot;bitte rufen sie ihren administrator\n&quot;;
}
</code></pre>
<p>ist doch alles in butter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1261467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261467</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 08 Apr 2007 00:35:32 GMT</pubDate></item><item><title><![CDATA[Reply to throw im konsruktor on Sun, 08 Apr 2007 07:26:45 GMT]]></title><description><![CDATA[<p>also ich hab den code nochmal etwas abgeändert und nun ist es schon möglich das objekt im try block zu erzeugen, da es später weniger oft benötigt wird als ich dachte.</p>
<p>volkard schrieb:</p>
<blockquote>
<p>ich nehme mal an, die klasse heißt Socket.</p>
</blockquote>
<p>Nein, so eine wird zwar auch verwendet aber es handelt sich bei mir um eine klasse zum verwalten von hostinformationen.</p>
<p>Euch allen aber nochmal Vielen Dank! <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/1261498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1261498</guid><dc:creator><![CDATA[jimmy3]]></dc:creator><pubDate>Sun, 08 Apr 2007 07:26:45 GMT</pubDate></item></channel></rss>