<?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[frage zu lokalen objekten]]></title><description><![CDATA[<p>hallo, ich habe mir zur Übung eine Klasse Bruch erstellt und dann folgenden Code ausprobiert:</p>
<pre><code class="language-cpp">Bruch *pnt = NULL;
	{
		Bruch b(3, 2);
		pnt = &amp;b;
	}
	pnt-&gt;gibAus();
</code></pre>
<p>Nun war meine Vermutung, dass das Objekt b nach verlassen des Blocks vom Stack entfernt wird, da es eben lokal ist und nicht auf dem Heap angelegt wurde. Komischerweise kann ich aber trotzdem noch über den Pointer auf das Objekt zugreifen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wann genau wird denn nun ein lokales Objekt gelöscht und warum hier gerade nicht?</p>
<p>Gruß, Jessy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293816/frage-zu-lokalen-objekten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 04:52:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293816.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Oct 2011 13:22:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 13:22:49 GMT]]></title><description><![CDATA[<p>hallo, ich habe mir zur Übung eine Klasse Bruch erstellt und dann folgenden Code ausprobiert:</p>
<pre><code class="language-cpp">Bruch *pnt = NULL;
	{
		Bruch b(3, 2);
		pnt = &amp;b;
	}
	pnt-&gt;gibAus();
</code></pre>
<p>Nun war meine Vermutung, dass das Objekt b nach verlassen des Blocks vom Stack entfernt wird, da es eben lokal ist und nicht auf dem Heap angelegt wurde. Komischerweise kann ich aber trotzdem noch über den Pointer auf das Objekt zugreifen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wann genau wird denn nun ein lokales Objekt gelöscht und warum hier gerade nicht?</p>
<p>Gruß, Jessy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130001</guid><dc:creator><![CDATA[Jessy12]]></dc:creator><pubDate>Tue, 11 Oct 2011 13:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 13:31:38 GMT]]></title><description><![CDATA[<p>Jessy12 schrieb:</p>
<blockquote>
<p>hallo, ich habe mir zur Übung eine Klasse Bruch erstellt und dann folgenden Code ausprobiert:</p>
<pre><code class="language-cpp">Bruch *pnt = NULL;
	{
		Bruch b(3, 2);
		pnt = &amp;b;
	}
	pnt-&gt;gibAus();
</code></pre>
<p>Nun war meine Vermutung, dass das Objekt b nach verlassen des Blocks vom Stack entfernt wird, da es eben lokal ist und nicht auf dem Heap angelegt wurde. Komischerweise kann ich aber trotzdem noch über den Pointer auf das Objekt zugreifen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wann genau wird denn nun ein lokales Objekt gelöscht und warum hier gerade nicht?</p>
<p>Gruß, Jessy</p>
</blockquote>
<p>Willkommen in der wunderbaren Welt des undefinierten Verhaltens. Das es &quot;funktioniert&quot; ist Glück. Es könnte alles mögliche passieren. Im Idealfall schmiert das Programm einfach ab. In Deinem Fall wohl leider nicht. Der Pointer zeigt immernoch irgendwo hin. Der Speicher gehört Dir aber nicht mehr. Du greifst also über den Pointer auf das &quot;Irgendwo&quot; zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130007</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 11 Oct 2011 13:31:38 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 13:53:14 GMT]]></title><description><![CDATA[<p>Auch wenn ich 10 Brüche in dem Block erzeuge, so werden trotzdem alle noch über Pointer gefunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> D.h. ich sollte sollche Konstrukte vermeiden, auch wenn es (glücklicherweise?) funktioniert, oder?</p>
<p>Gruß Jessy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130020</guid><dc:creator><![CDATA[Jessy12]]></dc:creator><pubDate>Tue, 11 Oct 2011 13:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 14:05:13 GMT]]></title><description><![CDATA[<p>Jessy12 schrieb:</p>
<blockquote>
<p>Auch wenn ich 10 Brüche in dem Block erzeuge, so werden trotzdem alle noch über Pointer gefunden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Undefiniertes Verhalten. D.h es kann wirklich alles passieren, z.B. dass du ne Weile drauf zugreifen kannst, irgendwann aber vielleicht nicht mehr. Es wäre sogar standardkonform, wenn dir der Zugriff die Platte zerlegt, den Rechner bunt anmalt oder sonstwas - weil der Standard eben sagt, dass bei UB alles mögliche passieren kann.</p>
<blockquote>
<p>D.h. ich sollte sollche Konstrukte vermeiden, auch wenn es (glücklicherweise?) funktioniert, oder?</p>
</blockquote>
<p>Definitiv.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130026</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Oct 2011 14:05:13 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 14:23:12 GMT]]></title><description><![CDATA[<p>Dann hätte ich gleich noch eine Frage zu einem von mir anders erwarteten Verhalten:</p>
<pre><code class="language-cpp">double calcSqrt(double d) throw(int) {
	if(d &lt; 0.0) throw new Bruch(1,1);
	double erg = sqrt(d);
	return d;
}

int main() {
	try {
		double erg = calcSqrt(-1);
		cout &lt;&lt; erg &lt;&lt; endl;
	}
	catch(...) {
		cout &lt;&lt; &quot;Fehler!&quot; &lt;&lt; endl;
	}
}
</code></pre>
<p>Das throw(int), so habe ich gelesen, sagt ja aus, dass nur(!) int werte geworfen werden dürfen. Andernfalls wird eine interne Methode unexpected() aufgerufen, die das Programm anscheinend beendet. Wenn ich den Code aber nun Ausführe, so komme ich komischerweise trotzdem in den catch-Block, obwohl ich doch vorgegeben habe, dass nur(!) int-Werte geworfen werden dürfen. Ich werfe aber ein Bruch-Objekt...</p>
<p>Warum wird denn nun trotzdem der catch-Block ausgeführt? Die throw(int)-Anweisung scheint keinen Unterschied zu machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>mfg Jessy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130036</guid><dc:creator><![CDATA[Jessy12]]></dc:creator><pubDate>Tue, 11 Oct 2011 14:23:12 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 14:37:56 GMT]]></title><description><![CDATA[<p>Manche Compiler beachten solche exception-Spezifikationen nicht. Erstens ist das nicht ganz einfach zu implementieren, zweitens verursacht das einen ziemlichen Overhead im generierten Code und im Laufzeitverhalten. Exceptionspezifikationen sind sowieso ziemlicher Mist, wenns nicht grade die nothrow-Spezifikation ist. Aus dem Grund ist alles außer nothrow im neuen Standard auch deprecated.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130043</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Oct 2011 14:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 14:38:45 GMT]]></title><description><![CDATA[<p>Ohne die Func calcSqrt zu bewerten; mit 'catch(...) ' fängst du meines Wissens alles.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130044</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130044</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Tue, 11 Oct 2011 14:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 14:42:22 GMT]]></title><description><![CDATA[<p>Klar fange ich damit alles ... aber es geht doch gerade darum, dass der Ausdruck throw() bewirken soll, dass nur noch die Typen, die in der Klammer stehen geworfen werden dürfen.</p>
<p>Also sagst Du, dass das am Compiler liegt und ich das Prinzip richtig verstanden habe, oder? Ich habe mich nur gefragt, ob ich irgendetwas an dem Konzept nicht richtig verstanden habe <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>mfg Jessy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130048</guid><dc:creator><![CDATA[Jessy12]]></dc:creator><pubDate>Tue, 11 Oct 2011 14:42:22 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 14:58:00 GMT]]></title><description><![CDATA[<p>Jessy12 schrieb:</p>
<blockquote>
<p>Also sagst Du, dass das am Compiler liegt und ich das Prinzip richtig verstanden habe, oder?</p>
</blockquote>
<p>Jap. Behalt das Wissen im Hinterkopf, verzichte aber auf Exceptionspezifikationen (außer throw() bzw noexcept in Ausnahmefällen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130054</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 11 Oct 2011 14:58:00 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 15:08:47 GMT]]></title><description><![CDATA[<p>Siehe auch <a href="http://www.cpp-tutor.de/cpp/le17/std_exception.html" rel="nofollow">http://www.cpp-tutor.de/cpp/le17/std_exception.html</a> unter 'bad_exception'<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130061</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Tue, 11 Oct 2011 15:08:47 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 15:10:43 GMT]]></title><description><![CDATA[<p>kommst du aus der java ecke?</p>
<p>weil du throwst einen new Bruch...<br />
du reservierst also speicher den du nie freigibst, in java ist das normal, da übernimmt sowas der garbage collector, aber hier in c++ ists böse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2130063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130063</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 11 Oct 2011 15:10:43 GMT</pubDate></item><item><title><![CDATA[Reply to frage zu lokalen objekten on Tue, 11 Oct 2011 15:31:37 GMT]]></title><description><![CDATA[<p>Ja, das hast du richtig erkannt <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="🙂"
    /> Ich habe mitte letzter Woche mit c++ angefangen. Allerdings ist mir der Fehler klar. Das war wohl reine Gewohnheit.</p>
<p>Trotzdem danke für den Hinweis <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/2130076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2130076</guid><dc:creator><![CDATA[Jessy12]]></dc:creator><pubDate>Tue, 11 Oct 2011 15:31:37 GMT</pubDate></item></channel></rss>