<?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[Objekte, Scopes und Destruktoren]]></title><description><![CDATA[<p>Hallo liebe Forengemeinde,</p>
<p>ich spiele gerade mit Objekten in Scopes herum. Dabei bin ich auf folgendes Problem gestoßen. Wieso führt der zweite Aufruf von p-&gt;say() auch zu einem &quot;alive&quot;? Der Destruktor wurde aufgerufen, wie er mitteilt. Trotzdem kann ich Funktionen eines toten Objekts aufrufen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

using namespace std;

class test{
public:
    test(){cout &lt;&lt; &quot;started&quot;;}
    ~test(){cout &lt;&lt; &quot;stopped&quot;;}
    void say(){cout &lt;&lt; &quot;alive&quot;;}

};

int main()
{

    test *p;
    {
        test t1;
        p=&amp;t1;
        p-&gt;say();
        system(&quot;pause&quot;);
    }

    system(&quot;pause&quot;);
    p-&gt;say();
    system(&quot;pause&quot;);
}
</code></pre>
<p>Das ganze soll die Grundidee dafür sein, dass in einer Funktion Objekte erzeugt werden und Zeiger auf diese in einer Liste gespeichert werden. Da nach Rückgabe der Funktion die Destruktoren aufgerufen werden, gibt mein Compiler Warnungen aus. Deshalb habe ich obigen Schnipsel konstruiert. Bitte um Klärung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/287100/objekte-scopes-und-destruktoren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 15:25:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287100.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 May 2011 19:18:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte, Scopes und Destruktoren on Sun, 22 May 2011 19:18:53 GMT]]></title><description><![CDATA[<p>Hallo liebe Forengemeinde,</p>
<p>ich spiele gerade mit Objekten in Scopes herum. Dabei bin ich auf folgendes Problem gestoßen. Wieso führt der zweite Aufruf von p-&gt;say() auch zu einem &quot;alive&quot;? Der Destruktor wurde aufgerufen, wie er mitteilt. Trotzdem kann ich Funktionen eines toten Objekts aufrufen.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

using namespace std;

class test{
public:
    test(){cout &lt;&lt; &quot;started&quot;;}
    ~test(){cout &lt;&lt; &quot;stopped&quot;;}
    void say(){cout &lt;&lt; &quot;alive&quot;;}

};

int main()
{

    test *p;
    {
        test t1;
        p=&amp;t1;
        p-&gt;say();
        system(&quot;pause&quot;);
    }

    system(&quot;pause&quot;);
    p-&gt;say();
    system(&quot;pause&quot;);
}
</code></pre>
<p>Das ganze soll die Grundidee dafür sein, dass in einer Funktion Objekte erzeugt werden und Zeiger auf diese in einer Liste gespeichert werden. Da nach Rückgabe der Funktion die Destruktoren aufgerufen werden, gibt mein Compiler Warnungen aus. Deshalb habe ich obigen Schnipsel konstruiert. Bitte um Klärung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067235</guid><dc:creator><![CDATA[*-BootLag-*]]></dc:creator><pubDate>Sun, 22 May 2011 19:18:53 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte, Scopes und Destruktoren on Sun, 22 May 2011 19:22:24 GMT]]></title><description><![CDATA[<p>Das nennt sich undefiniertes Verhalten - das Objekt wurde zerstört, aber davon bekommt der Zeiger nichts mit. Und dann rufst du eine Methode des ehemaligen Objekts auf. Das geht nur darum gut, weil diese Methode keine Member des Objekts ausnutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067238</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 22 May 2011 19:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte, Scopes und Destruktoren on Sun, 22 May 2011 19:57:10 GMT]]></title><description><![CDATA[<p>In der Regel werden nicht-virtuelle Methodenaufrufe vom Compiler in einfache Funktionsaufrufe umgesetzt (halt mit verstecktem this-Parameter). Wird this dann nicht dereferenziert, läuft das Ganze durch - aber, wie CStoll richtig bemerkt, vom C++-Standard gedeckt ist das natürlich nicht.</p>
<p>Ein Compiler darf - und in ähnlichen Situationen tun gängige Compiler das mit entsprechenden Optionen auch - Code generieren, der so etwas verhindert. Es sollte mich nicht wundern, wenn gccs Mudflap oder MSVCs Debug-Modus darauf allergisch reagieren oder in zukünftigen Versionen reagieren werden. Auch können ganz generell Optimierungen zu seltsamen Effekten führen, wenn man undefiniertes Verhalten erzeugt - siehe beispielsweise <a href="http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html" rel="nofollow">diesen Artikel</a>, der zwar C als Beispiel nimmt, aber Effekte beschreibt, die auch mit einem C++-Compiler passieren können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067247</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 22 May 2011 19:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte, Scopes und Destruktoren on Mon, 23 May 2011 14:10:31 GMT]]></title><description><![CDATA[<p>OK danke für diese Hinweise <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2067456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2067456</guid><dc:creator><![CDATA[*-BootLag-*]]></dc:creator><pubDate>Mon, 23 May 2011 14:10:31 GMT</pubDate></item></channel></rss>