<?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[Delete c++]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe 2 classen</p>
<pre><code class="language-cpp">class a {

   ~a() {
    for (int i = 0; i &lt; m_protocols.size(); i++ )
    {
        xwProtocol* p = m_protocols.at(i);
        if ( p ) {
         delete p; p = 0;
        }
    }
  } 
}

class b {

   ~b() {
    for (int i = 0; i &lt; m_protocols.size(); i++ )
    {
        xwProtocol* p = m_protocols.at(i);
        if ( p ) {
         delete p; p = 0;
        }
    }
  } 
}
</code></pre>
<p>Wenn ich nun folgendes mache :<br />
....<br />
Protocol* p = new Protocol();<br />
a-&gt;add(p);<br />
b-&gt;add(p);<br />
delete a;<br />
delete b; hier gibts einen crash weil p in a schon gelöscht wurde!<br />
wie kann ich aber bein delete überprüfen ob das objekt wo er pointer hinzeigt noch existiert?</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271237/delete-c</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 14:58:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271237.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Jul 2010 12:18:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 12:18:20 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe 2 classen</p>
<pre><code class="language-cpp">class a {

   ~a() {
    for (int i = 0; i &lt; m_protocols.size(); i++ )
    {
        xwProtocol* p = m_protocols.at(i);
        if ( p ) {
         delete p; p = 0;
        }
    }
  } 
}

class b {

   ~b() {
    for (int i = 0; i &lt; m_protocols.size(); i++ )
    {
        xwProtocol* p = m_protocols.at(i);
        if ( p ) {
         delete p; p = 0;
        }
    }
  } 
}
</code></pre>
<p>Wenn ich nun folgendes mache :<br />
....<br />
Protocol* p = new Protocol();<br />
a-&gt;add(p);<br />
b-&gt;add(p);<br />
delete a;<br />
delete b; hier gibts einen crash weil p in a schon gelöscht wurde!<br />
wie kann ich aber bein delete überprüfen ob das objekt wo er pointer hinzeigt noch existiert?</p>
<p>Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931318</guid><dc:creator><![CDATA[saschaappel]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 12:31:45 GMT]]></title><description><![CDATA[<p>Kurze Antwort:<br />
Gar nicht!</p>
<p>volkard sagt immer:</p>
<blockquote>
<p>Zu jeden new gehört genau ein delete</p>
</blockquote>
<p>und da gebe ich im absolut recht.</p>
<p>Ansonsten kannst du einen Container mit Smart-Pointern verwenden,<br />
falls du keine Objekt-Zugehörigkeit definieren kannst, nach<br />
der sich dein delete richtet.</p>
<p>Warum das bei dir 2 verschiedene Klassen sind, frag ich mal nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931324</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 12:33:58 GMT]]></title><description><![CDATA[<p><a href="http://c-plusplus.net/forum/viewtopic-var-t-is-271148.html" rel="nofollow">So</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931326</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:33:58 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 12:34:56 GMT]]></title><description><![CDATA[<p>Ich gebe XSpille recht. Die Verantwortung liegt definitiv bei der Klasse (oder Funktion), welche p erzeugt und soll daher den Speicher dafür auch wieder freigeben.</p>
<p>Ansonsten gäbe es die Möglichkeit da einen Smart Pointer zu benutzen, welcher dann auch schaut, ob der Zeiger bereits fregegeben worden ist. Aber das ist nur etwas für einen Spezialfall. Im generellen funktioniert das wirklich so, dass der, der das Objekt erzeugt auch wieder zerstört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931327</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 12:38:57 GMT]]></title><description><![CDATA[<p>Nur nicht Smart-Pointer verwenden, wenn man Pointer-Container (z.B. die von Boost) braucht. <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/1931332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931332</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 12:49:23 GMT]]></title><description><![CDATA[<p>saschaappel schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if ( p ) {
         delete p; p = 0;
        }
</code></pre>
</blockquote>
<p>Noch ein Tipp: statt diesem ganzen Rotz kannst du einfach nur <code>delete p;</code> schreiben, das macht das gleiche. Der Rest ist unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931339</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Sun, 25 Jul 2010 12:49:23 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 13:16:25 GMT]]></title><description><![CDATA[<p>Hi vielen dank</p>
<p>smart_pointers bei std::vector sollte man glaube ich nicht verwenden.<br />
Ok vielen dank, habt mir geholfen, ich weiss das das der falsche weg ist!</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931359</guid><dc:creator><![CDATA[saschaappel]]></dc:creator><pubDate>Sun, 25 Jul 2010 13:16:25 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 13:18:54 GMT]]></title><description><![CDATA[<p>saschaappel schrieb:</p>
<blockquote>
<p>smart_pointers bei std::vector sollte man glaube ich nicht verwenden.</p>
</blockquote>
<p><code>auto_ptr</code> geht nicht mit STL-Containern, <code>shared_ptr</code> schon. Aber der ist für geteilte Besitzverhältnisse. Für besitzende Zeiger in Containern ohne Shared-Semantik gibts wie schon genannt spezialisierte Lösungen (<em>Boost.PointerContainer</em>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931361</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 25 Jul 2010 13:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 13:19:40 GMT]]></title><description><![CDATA[<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>saschaappel schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if ( p ) {
         delete p; p = 0;
        }
</code></pre>
</blockquote>
<p>Noch ein Tipp: statt diesem ganzen Rotz kannst du einfach nur <code>delete p;</code> schreiben, das macht das gleiche. Der Rest ist unnötig.</p>
</blockquote>
<p>Das stimm ja nicht ganz...</p>
<p>Der Zeiger wird ja in deinem angesprochenen Fall nicht auf 0 gesetzt.<br />
Das braucht man zwar in den seltensten Fällen, aber sollte nicht<br />
verschwiegen werden.<br />
Wenn man z.B. das letzte Element einer Liste löschen will,<br />
würde das einen großen Unterschied machen <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>Das wäre identisch:</p>
<pre><code class="language-cpp">delete p;
p = 0;
</code></pre>
<p>In deinem Fall reicht aber:</p>
<pre><code class="language-cpp">delete p;
</code></pre>
<p>delete p überprüft vorher, ob p==0 ist<br />
Das meinte Nukularfüsiker sehr wahrscheinlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931363</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 25 Jul 2010 13:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 13:27:51 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>saschaappel schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if ( p ) {
         delete p; p = 0;
        }
</code></pre>
</blockquote>
<p>Noch ein Tipp: statt diesem ganzen Rotz kannst du einfach nur <code>delete p;</code> schreiben, das macht das gleiche. Der Rest ist unnötig.</p>
</blockquote>
<p>Das stimm ja nicht ganz...</p>
</blockquote>
<p>Aber in</p>
<pre><code class="language-cpp">{ 
        xwProtocol* p = m_protocols.at(i); 
        if ( p ) { 
         delete p; p = 0; 
        } 
    }
</code></pre>
<p>ist es identisch zu</p>
<pre><code class="language-cpp">{ 
        xwProtocol* p = m_protocols.at(i); 
        delete p;
    }
</code></pre>
<p>denn p fliegt ja sofort weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931367</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 25 Jul 2010 13:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 13:45:26 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>:</p>
<p>Gebe ich dir absolut recht...</p>
<p>Die Aussage von Nukularfüsiker konnte man (denke ich) auch als allgemeine<br />
Aussage interpretieren.</p>
<p>Ich wollte nur Missverständnisse vermeiden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931374</guid><dc:creator><![CDATA[XSpille]]></dc:creator><pubDate>Sun, 25 Jul 2010 13:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 14:00:43 GMT]]></title><description><![CDATA[<p>XSpille schrieb:</p>
<blockquote>
<p>Die Aussage von Nukularfüsiker konnte man (denke ich) auch als allgemeine<br />
Aussage interpretieren.</p>
</blockquote>
<p>Jo, die allgemeine Aussage ist, dass man vor delete nicht auf 0 prüft und man unbenutzte lokale Pointer nicht auf 0 setzen braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931378</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Sun, 25 Jul 2010 14:00:43 GMT</pubDate></item><item><title><![CDATA[Reply to Delete c++ on Sun, 25 Jul 2010 14:07:04 GMT]]></title><description><![CDATA[<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>XSpille schrieb:</p>
<blockquote>
<p>Die Aussage von Nukularfüsiker konnte man (denke ich) auch als allgemeine<br />
Aussage interpretieren.</p>
</blockquote>
<p>Jo, die allgemeine Aussage ist, dass man vor delete nicht auf 0 prüft und man unbenutzte lokale Pointer nicht auf 0 setzen braucht.</p>
</blockquote>
<p>Und man braucht im Destruktor seine Memberpointers nicht auf 0 zu setzen. Das wird mir nämlich auch oft angetan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1931382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1931382</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 25 Jul 2010 14:07:04 GMT</pubDate></item></channel></rss>