<?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[Exception handling für objekte]]></title><description><![CDATA[<p>Hi,<br />
ich wollte mich jetz ins exception handling einarbeiten und hab gleich mal ne Frage.</p>
<p>Ich habe jetzt einen Fall, bei dem ich etwas mit der initialisierung der Objekte durcheinander gekommen bin bzw. ich versucht habe auf ein objekt zuzugreifen, das ich erst zu einem späteren Zeitpunkt instanziiere.</p>
<p>Ganz klar das programm stürzt ab, jetzt möchte ich ich in dem methoden, die referenzen auf objekte liefern, erstmal die prüfung mit rein nehmen, ob ein objekt überhaupt schon initialisiert wurde.</p>
<p>Ich erzeuge die objekte mit new für den Fall, das das hier relevant ist.</p>
<p>Jetz kommt mir aber keine Idee, wie ich den Pointer für den ich das objekt noch nicht angelegt habe auf genau diesen Umstand prüfen kann. Damit ich statt die referenz zurückzugeben, eine exception werfen kann.</p>
<p>Hört sich ziemlich verwirrend an. Das bin ich momentan auch <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/topic/284609/exception-handling-für-objekte</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 22:22:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284609.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Apr 2011 18:37:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exception handling für objekte on Mon, 04 Apr 2011 18:37:33 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich wollte mich jetz ins exception handling einarbeiten und hab gleich mal ne Frage.</p>
<p>Ich habe jetzt einen Fall, bei dem ich etwas mit der initialisierung der Objekte durcheinander gekommen bin bzw. ich versucht habe auf ein objekt zuzugreifen, das ich erst zu einem späteren Zeitpunkt instanziiere.</p>
<p>Ganz klar das programm stürzt ab, jetzt möchte ich ich in dem methoden, die referenzen auf objekte liefern, erstmal die prüfung mit rein nehmen, ob ein objekt überhaupt schon initialisiert wurde.</p>
<p>Ich erzeuge die objekte mit new für den Fall, das das hier relevant ist.</p>
<p>Jetz kommt mir aber keine Idee, wie ich den Pointer für den ich das objekt noch nicht angelegt habe auf genau diesen Umstand prüfen kann. Damit ich statt die referenz zurückzugeben, eine exception werfen kann.</p>
<p>Hört sich ziemlich verwirrend an. Das bin ich momentan auch <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/2044689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044689</guid><dc:creator><![CDATA[ZSchneidi]]></dc:creator><pubDate>Mon, 04 Apr 2011 18:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Mon, 04 Apr 2011 18:43:42 GMT]]></title><description><![CDATA[<p>Kannst du das mal etwas klarer formulieren?</p>
<p>Zur Not könnte ja das hier helfen:</p>
<pre><code class="language-cpp">int* ziel = NULL; // bzw. nullptr

if(!ziel)
  throw &quot;fehler - Objekt existiert nicht&quot;;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2044693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044693</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 04 Apr 2011 18:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Tue, 05 Apr 2011 06:59:26 GMT]]></title><description><![CDATA[<p>Ok sorry dachte mir schon, das das etwas unklar formuliert war.</p>
<p>Ich hab mal versucht den Fall in einem Beispiel abzubilden.</p>
<p>Beispiel</p>
<pre><code class="language-cpp">class B;
class C;
class D;

class A
{
private:
	int *c;
	B *obj_b;
	C *obj_c;
    D obj_d;

public:

	explicit A();
	inline int *getC() {return this-&gt;c;}
	inline C *getObjC() {return this-&gt;obj_c;}
};

A::A()
{
	this-&gt;obj_b = new B(this);
	this-&gt;obj_c = new C();
}

class B
{
private:
	int *c;
	A *parent;
	C *sibling;

public:
	explicit B(A *parent);

};

B::B(A *parent)
{
	this-&gt;parent = parent;
	this-&gt;c = this-&gt;parent-&gt;getC();
	this-&gt;sibling = this-&gt;parent-&gt;getObjC();
}

class C
{
	//irgendwas
};

class D
{
        //irgendwas
};
</code></pre>
<p>Ich hoffe das wirkt einigermaßen sinnig.</p>
<p>Wenn ich A aufrufe, wird B ja noch vor C erzeugt. Wenn ich aber den Fall habe, dass B direkt im Konstruktor schon auf C zugreifen möchte geht das verständlicherweise schief.</p>
<p>Ich werde dann jetzt also erstmal hingehen und im Konstruktor sauber alle Pointer auf Null setzen und darauf prüfen?</p>
<p>Wie gehe ich da mit Objekten um, die nicht als Pointer vorliegen wie hier &quot;obj_d&quot; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044790</guid><dc:creator><![CDATA[ZSchneidi]]></dc:creator><pubDate>Tue, 05 Apr 2011 06:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Tue, 05 Apr 2011 09:21:42 GMT]]></title><description><![CDATA[<p>Ich bin immer noch nicht ganz sicher, was dein Problem ist.</p>
<p>Wenn B C benötigt und B aber vor C erzeugt wird, ist das ein Designfehler. Dann darfst Du das im constructor eben nicht aufrufen. Ich weiß nicht, wie Du das durch Nullsetzen vorher lösen möchtest. Das Nutzen von C muss in B dann halt nachher geschehen.</p>
<blockquote>
<p>Wie gehe ich da mit Objekten um, die nicht als Pointer vorliegen wie hier &quot;obj_d&quot; ?</p>
</blockquote>
<p>Bzgl. was vorgehen? <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>
<p>Ach, evtl. noch ein Verständnisfehler bzgl. Exceptions:</p>
<pre><code class="language-cpp">Ich habe jetzt einen Fall, bei dem ich etwas mit der initialisierung der Objekte durcheinander gekommen bin bzw. ich versucht habe auf ein objekt zuzugreifen, das ich erst zu einem späteren Zeitpunkt instanziiere.
</code></pre>
<p>Wenn das hart verdrahtet ist, also keine Dynamik in dem Sinne dazu kommt, dass nach der korrekten Programmierung das Problem nochmals auftreten kann, dann sind Exceptions hier nicht angebracht. Exceptions sollen keine Designfehler aufdecken, sondern auftreten, wenn irgendwelche Benutzereingaben oder Fehler externer Bibliotheken, Geräte (z.B. E/A-Geräte), Dateisystemprobleme o.ä. auftreten.</p>
<p>assert passt da etwas eher, was im Debugmodus fest eingegebene Werte überprüft, die also nicht von Dingen abhängen, die der Programmierer nicht im Vorfeld beachtet hat. Analog gibt es auch statische Asserts (static_assert), die zur Kompilierzeit bestimmte Umstände prüfen.</p>
<p>Aber eigentlich würde ich hier einfach korrekt programmieren und dann ist das Problem gegessen, obige Mittel sollten hier imo keine Anwendung finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044820</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 05 Apr 2011 09:21:42 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Tue, 05 Apr 2011 14:43:30 GMT]]></title><description><![CDATA[<p>Hi Eisflamme,</p>
<p>da stimme ich dir zu, ich hatte das mit den exceptions hier wirklich etwas pervertiert. <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>Dachte mir schon, dass ich an dieser stelle nur sauber programmieren müsste, damit das nicht auftritt. Hab ich auch gemacht und es läuft. Ich hätte nur gedacht, dass ich evtl. einen Mechanismus mit einbauen könnte, der verhindert das Speicherzugriffsfehler auftreten, wenn ich so achtlos an die Sache gehe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045011</guid><dc:creator><![CDATA[ZSchneidi]]></dc:creator><pubDate>Tue, 05 Apr 2011 14:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Tue, 05 Apr 2011 14:47:04 GMT]]></title><description><![CDATA[<p>Weiß nicht. Solche Mechanismen einzubauen mit der Befürchtung falsch zu programmieren, halte ich nicht für sinnvoll. Alles mit null zu initialisieren und darauf abzuprüfen und bei einer fehlerhaften Zuweisung ne Exception o.ä. zu werfen mag ich nicht.</p>
<p>Vielleicht helfen ein paar Kommentare weiter, wenn die Zusammenhänge komplizierter werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045013</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 05 Apr 2011 14:47:04 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Tue, 05 Apr 2011 15:44:36 GMT]]></title><description><![CDATA[<p>ZSchneidi schrieb:</p>
<blockquote>
<p>Ich hätte nur gedacht, dass ich evtl. einen Mechanismus mit einbauen könnte, der verhindert das Speicherzugriffsfehler auftreten, wenn ich so achtlos an die Sache gehe.</p>
</blockquote>
<p>Wenn du so achtlos daran gehst, wirst du erst recht nicht die Exception fangen (außer vielleicht später mit einem catchall). Dann ists auch fast schon egal, ob du einen Zugriffsfehler bekommst oder eine Exception, die durchrauscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045042</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Apr 2011 15:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Exception handling für objekte on Tue, 05 Apr 2011 18:54:57 GMT]]></title><description><![CDATA[<p>Gut ok, seh ich alles ein.</p>
<p>An sich war das nur mal interesse halber, ob man sowas abfangen sollte oder einfach entsprechend darauf achtet, wann man worauf zugreift.</p>
<p>Sollte nicht so schwierig sein. Ich selbst habe nur noch nicht die erfahrung mit entsprechend großen projekten. Deshalb fehlts mir da etwas an Vorausplanung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045133</guid><dc:creator><![CDATA[ZSchneidi]]></dc:creator><pubDate>Tue, 05 Apr 2011 18:54:57 GMT</pubDate></item></channel></rss>