<?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[C++ - Objektreferenzen und wenn ihr Objekt geloescht wird]]></title><description><![CDATA[<p>Ich würde ganz gerne in einer Liste Referenzen auf Objekte verwalten. Dabei stellt sich mir aber das Problem, was passiert wenn ein solches Objekt geloescht wurde.</p>
<p>Dazu habe ich untenstehenden Code erstellt. Kann mir vielleicht jemand genauer erläutern, was dort intern passiert?</p>
<p>Und warum bekomme ich in den Zeilen 25 und 26 keine Speicherzugriffsfehler oder ähnliches?</p>
<p>Compiliert habe ich mit &quot;g++ test.cpp -o tst -Wall&quot;, falls das irgendwie von Bedeutung sein sollte. Fehler oder Warnungen hat mir das nicht gebracht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class A
{
public: int a;
        A()
        {
                a = 3;
        }
};

int main(int argc, char** argv)
{
        A *a; 
        a = new A();
        a-&gt;a = 10; 

        A &amp;b = *a; 
        cout &lt;&lt; b.a &lt;&lt; endl;    //10

        delete a;
        cout &lt;&lt; b.a &lt;&lt; endl;    //0 

        b.a = 15; 
        cout &lt;&lt; b.a &lt;&lt; endl;    //15

        A *c = new A();
        cout &lt;&lt; c-&gt;a &lt;&lt; &quot;  &quot; &lt;&lt; b.a &lt;&lt; endl;    //3  3

        return 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/245651/c-objektreferenzen-und-wenn-ihr-objekt-geloescht-wird</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 13:56:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245651.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Jul 2009 17:02:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Thu, 16 Jul 2009 17:02:57 GMT]]></title><description><![CDATA[<p>Ich würde ganz gerne in einer Liste Referenzen auf Objekte verwalten. Dabei stellt sich mir aber das Problem, was passiert wenn ein solches Objekt geloescht wurde.</p>
<p>Dazu habe ich untenstehenden Code erstellt. Kann mir vielleicht jemand genauer erläutern, was dort intern passiert?</p>
<p>Und warum bekomme ich in den Zeilen 25 und 26 keine Speicherzugriffsfehler oder ähnliches?</p>
<p>Compiliert habe ich mit &quot;g++ test.cpp -o tst -Wall&quot;, falls das irgendwie von Bedeutung sein sollte. Fehler oder Warnungen hat mir das nicht gebracht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class A
{
public: int a;
        A()
        {
                a = 3;
        }
};

int main(int argc, char** argv)
{
        A *a; 
        a = new A();
        a-&gt;a = 10; 

        A &amp;b = *a; 
        cout &lt;&lt; b.a &lt;&lt; endl;    //10

        delete a;
        cout &lt;&lt; b.a &lt;&lt; endl;    //0 

        b.a = 15; 
        cout &lt;&lt; b.a &lt;&lt; endl;    //15

        A *c = new A();
        cout &lt;&lt; c-&gt;a &lt;&lt; &quot;  &quot; &lt;&lt; b.a &lt;&lt; endl;    //3  3

        return 0;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1744431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744431</guid><dc:creator><![CDATA[knuddelvieh]]></dc:creator><pubDate>Thu, 16 Jul 2009 17:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Thu, 16 Jul 2009 17:34:22 GMT]]></title><description><![CDATA[<p>Das Verhalten beim Verwenden einer Referenz auf ein gelöschtes Objekt ist undefiniert, also was spielt es für eine Rolle, welche Zahlen dabei rauskommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744444</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 16 Jul 2009 17:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Thu, 16 Jul 2009 17:35:13 GMT]]></title><description><![CDATA[<blockquote>
<p>Und warum bekomme ich in den Zeilen 25 und 26 keine Speicherzugriffsfehler oder ähnliches?</p>
</blockquote>
<p>Weil das einfach undefined behaviour ist. Da kann irgendwas passieren.<br />
Auch Zeile 23 ist undef. beh.<br />
Und Zeile 29 b.a auch.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744445</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 16 Jul 2009 17:35:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Fri, 17 Jul 2009 07:03:39 GMT]]></title><description><![CDATA[<p>Hi knuddelvieh,</p>
<p>vielleicht nur ein Hinweis zum Sprachgebrauch: Unter &quot;Referenz&quot; versteht man in C++ meistens keinen Zeiger (auch wenn beides im Sinne von &quot;Verweis&quot; auch eine &quot;Referenz&quot; ist). Du minderst das Missverständnisrisiko, wenn Du diese konvention beachtest....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744611</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 17 Jul 2009 07:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Fri, 17 Jul 2009 07:53:57 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Das Verhalten beim Verwenden einer Referenz auf ein gelöschtes Objekt ist undefiniert, also was spielt es für eine Rolle, welche Zahlen dabei rauskommen?</p>
</blockquote>
<p>Ahh, danke!<br />
Es war mir unklar, dass das nicht standardisiert ist. <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>Simon2 schrieb:</p>
<blockquote>
<p>Hi knuddelvieh,</p>
<p>vielleicht nur ein Hinweis zum Sprachgebrauch: Unter &quot;Referenz&quot; versteht man in C++ meistens keinen Zeiger (auch wenn beides im Sinne von &quot;Verweis&quot; auch eine &quot;Referenz&quot; ist). Du minderst das Missverständnisrisiko, wenn Du diese konvention beachtest....</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Das eine Referenz kein Pointer ist, ist mir klar. Bloß interessehalber, an welche Stelle hab ich da was verwechselt? (Ich hatte wirklich überlegt Referenzen zu verwalten und keine Pointer, ob das geht weiß ich aber selbst noch nicht. :-D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744624</guid><dc:creator><![CDATA[knuddelvieh]]></dc:creator><pubDate>Fri, 17 Jul 2009 07:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Fri, 17 Jul 2009 08:04:07 GMT]]></title><description><![CDATA[<p>Diese Aussage geht in C++ nicht:</p>
<blockquote>
<p>Ich würde ganz gerne in einer Liste Referenzen auf Objekte verwalten.</p>
</blockquote>
<p>Da Referenzen lediglich Alternativnamen sind brauchen sie auch keinen/nicht unbedingt einen Speicherplatz. Und somit können auch keine Listen damit verwaltet werden, was mit Zeiger möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744631</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 17 Jul 2009 08:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Fri, 17 Jul 2009 08:06:01 GMT]]></title><description><![CDATA[<p>Ahh gut, meine Idee war bloß, dass ich Referenzen verwalte, da ich dachte da ist eventuell auch ein Referenzcounter dabei.</p>
<p>Aber dann muss ich es eben doch mit Pointern machen.</p>
<p>Danke euch allen für die Hinweise. <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/1744633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744633</guid><dc:creator><![CDATA[knuddelvieh]]></dc:creator><pubDate>Fri, 17 Jul 2009 08:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Fri, 17 Jul 2009 08:24:59 GMT]]></title><description><![CDATA[<p>Hehe. Nette Idee, aber das ist gar nicht nötig, weil eine Referenz _immer_ gültig ist, respektive auf ein Objekt verweist. (Es gibt Möglichkeiten eine Referenz ungültig zu machen, was aber kein legales C++ mehr ist).</p>
<p>Aber du könntest einen Smart Pointer benutzen, oder auch einen Pointer Container von boost:</p>
<p>Smnart Pointer:<br />
<a href="http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/smart_ptr.htm" rel="nofollow">http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/smart_ptr.htm</a></p>
<p>Pointer Container:<br />
<a href="http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html" rel="nofollow">http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744648</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 17 Jul 2009 08:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Fri, 17 Jul 2009 09:46:18 GMT]]></title><description><![CDATA[<p>knuddelvieh schrieb:</p>
<blockquote>
<p>Ahh gut, meine Idee war bloß, dass ich Referenzen verwalte, da ich dachte da ist eventuell auch ein Referenzcounter dabei.</p>
</blockquote>
<p>Nein, C++ bietet für die einfachen Typen eigentlich kaum solche Funktionalität an (zumindest nicht direkt als Sprachfeature). Aber das kann man leicht nachbauen. <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>Wenn du geteilten Besitz (mehrere Zeiger zeigen auf das gleiche Objekt, der letzte soll es richtig freigeben) brauchst, ist <code>boost::shared_ptr</code> genau das Richtige für dich. Mehr findest du unter drakons Link.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744701</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 17 Jul 2009 09:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to C++ - Objektreferenzen und wenn ihr Objekt geloescht wird on Sat, 18 Jul 2009 22:31:42 GMT]]></title><description><![CDATA[<p>knuddelvieh schrieb:</p>
<blockquote>
<p>...Bloß interessehalber, an welche Stelle hab ich da was verwechselt?...</p>
</blockquote>
<p>Nunja - Du sagst &quot;Referenzen&quot; - in Deinem Code tauchen aber nur &quot;Zeiger&quot; auf, so dass ich davon ausgegangen bin, dass Dir der Unterschied nicht ganz bewusst ist.<br />
Aber auch egal.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1745556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1745556</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 18 Jul 2009 22:31:42 GMT</pubDate></item></channel></rss>