<?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[zeiger löschen verhindern]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine funktion die dem benutzer einen zeiger auf ein objekt zurückgibt. allerdings habe ich da momentan das problem, dass der benutzer das dahinterstehende objekt löschen könnte (z.B. mit delete). meine frage ist nun ob ich das verhindern kann, vllt mit const oder so?<br />
Bsp.:</p>
<pre><code class="language-cpp">//hier möchte ich quasi verhindern, dass der benutzer
//die zurückgelieferte adresse benutzt, um das objekt zu löschen
int *foo();
</code></pre>
<p>vielen dank schonmal im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219130/zeiger-löschen-verhindern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 12:28:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219130.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jul 2008 08:32:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 08:32:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine funktion die dem benutzer einen zeiger auf ein objekt zurückgibt. allerdings habe ich da momentan das problem, dass der benutzer das dahinterstehende objekt löschen könnte (z.B. mit delete). meine frage ist nun ob ich das verhindern kann, vllt mit const oder so?<br />
Bsp.:</p>
<pre><code class="language-cpp">//hier möchte ich quasi verhindern, dass der benutzer
//die zurückgelieferte adresse benutzt, um das objekt zu löschen
int *foo();
</code></pre>
<p>vielen dank schonmal im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556158</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 30 Jul 2008 08:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 08:33:36 GMT]]></title><description><![CDATA[<p>Referenz zurückgeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556159</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Wed, 30 Jul 2008 08:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 09:25:43 GMT]]></title><description><![CDATA[<p>Der Benutzer der Schnittstelle kann das Objekt immer löschen. Dagegen kannst du erstmal nichts tun.</p>
<p>const hilft nicht. Wie sollten sonst const-Objekte zerstört werden, mmh? <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>Du könntest eine Proxy-Klasse mit überladenem -&gt; Operator schreiben.</p>
<p>Oder vielleicht den Destruktor private machen und die Lösch-Instanz zum friend erklären (das ist allerdings ein fragwürdiges Design). Edit: Äääh und ich seh gerade, dass es sich um einen int handelt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Oder, ja, Referenz, sofern der Schnittstellenvertrag das zulässt und die Eigentümerschaft klar geregelt bleibt.</p>
<p>Edit2:<br />
Mal ganz davon abgesehen, dass ein Klient dieser Schnittstelle das Objekt niemals löschen kann (wenn er sie als Blackbox betrachtet), da er garnicht wissen kann, wie es erzeugt wurde (new, new[], malloc, irgendeine beliebige andere Funktion). Wer sowas macht, gehört sowieso geschlagen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556194</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 30 Jul 2008 09:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 09:18:51 GMT]]></title><description><![CDATA[<p>Factory anbieten, Konstruktoren/Destruktoren privat machen.<br />
(Factory als Friend).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556196</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Wed, 30 Jul 2008 09:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 10:57:57 GMT]]></title><description><![CDATA[<p>/EDIT: falsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556203</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 30 Jul 2008 10:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 09:30:17 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int const * foo();
</code></pre>
<p>täte es ja schon mal ...</p>
</blockquote>
<p>Ähm wie kommst du darauf oder was meinst du?</p>
<p>Darauf kannst du ein delete machen wie auf alles andere.</p>
<p>Wie solle man sonst das hier wieder zerstören? :</p>
<pre><code class="language-cpp">int const * p = new const int(5);
delete p; // wäre ziemlich schlecht, wenn das nicht gehen würde :clown:
</code></pre>
<p>cv-Qualifikationen werden beim Erzeugen und Zerstören ignoriert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556212</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 30 Jul 2008 09:30:17 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 09:54:56 GMT]]></title><description><![CDATA[<p>wie siehts aus mit einem shared_ptr&lt;int&gt;:<br />
macht zumindest deutlich(er), dass mutwillige Zerstörungsversuche nicht erwünscht bzw. eingeplant sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556227</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 30 Jul 2008 09:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 10:57:34 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>...cv-Qualifikationen werden beim Erzeugen und Zerstören ignoriert.</p>
</blockquote>
<p>Hmmm, also ich hatte das anders in Erinnerung (meinte, mal Compile-Probleme mit einem delete auf einen &quot;const *&quot; gehabt zu haben) ... aber gerade habe ich auch die entsprechende Bemerkung im Std gefunden ...</p>
<p>Kap. 5.3.5.2, Note2 schrieb:</p>
<blockquote>
<p>... a pointer to a const type can the operand of a <em>delete-expression</em>; it is not necessary to cast away the constness(5.2.11) of the pointer expression before it is used as the operand of the <em>delete-expression</em>...</p>
</blockquote>
<p>Sorry, mein Fehler,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556283</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 30 Jul 2008 10:57:34 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 11:01:03 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Sorry, mein Fehler</p>
</blockquote>
<p>Kein Problem. Und, no offense <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/1556287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556287</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 30 Jul 2008 11:01:03 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 11:20:45 GMT]]></title><description><![CDATA[<p>also referenzen machen sich schlecht, da ich u. U. auch mal einen nullptr zurückgeben möchte. das mit int war nur ein beispiel. in meinem fall ist das ein template-objekt-pointer, den ich zurückgebe.<br />
naja das mit der proxy-klasse und factory, da weiß ich nicht was das ist bzw was damit gemeint ist. und shared_ptr sagt mir auch nichts <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1556308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556308</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 30 Jul 2008 11:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 11:34:06 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>naja das mit der proxy-klasse und factory, da weiß ich nicht was das ist bzw was damit gemeint ist. und shared_ptr sagt mir auch nichts <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><a href="http://www.google.de/search?hl=de&amp;q=proxy+pattern&amp;meta=" rel="nofollow">google: proxy pattern</a> ist ein design pattern (Entwurfsmuster) - wenn du das noch nicht kennst solltest du es dir aneignen, es ist eines der häufiger gebrauchten Entwurfsmuster in OO-Software.<br />
<a href="http://www.google.de/search?hl=de&amp;q=factory+pattern&amp;meta=" rel="nofollow">google: Factory pattern</a> ist ebenfalls ein häufig gebrauchtes design pattern.<br />
<a href="http://www.google.de/search?hl=de&amp;q=shared_ptr&amp;meta=" rel="nofollow">google: shared_ptr</a> ist ein sogenannter smart pointer, wohl der bekannteste außer vielleicht std::auto_ptr. Solltest du noch nichts von smart pointern gehört haben, auch das ist ein in C++ sehr weit verbreitetes und bekanntes Konzept, das du dir auf jeden Fall früher oder später aneignen solltest.</p>
<p>P.S: wenn Begriffe auftauchen, die dir nichts sagen, zeig Einsatz und schau es nach (google, wikipedia...) bevor du hier nach Erklärungen fragst <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><a href="http://www.gidf.de/" rel="nofollow">http://www.gidf.de/</a> <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/1556317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556317</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 30 Jul 2008 11:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 11:47:17 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>google: proxy pattern</p>
</blockquote>
<p>Naja, das Proxy Pattern wäre doch schon ziemlich hart und oversized. <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="🙂"
    /> Auch wenn es dem Verständnis förderlich ist.</p>
<p>Ich dachte eher an sowas hier:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class PointerProxy
{
  T* t_;
public:
  PointerProxy( T* t) : t_( t) { }
  bool assigned() const { return t_ != 0 }
  T* operator-&gt;() { assert( t_ != 0); return t_; }
}
</code></pre>
<p>Und dann eben:</p>
<pre><code class="language-cpp">PointerProxy&lt;MyClass&gt; f() {
  // do something
}

...

PointerProxy&lt;MyClass&gt; p = f();
if( p.assigned()) {
p-&gt;myMethod( &quot;yay!&quot;);
}
</code></pre>
<p>Imho aber völlig unnötig, da einerseits eine Funktion, die dem Aufrufer auch den Besitz des Speichers überantwortet, schlampig wäre und andererseits ein Aufrufer, der einfach an diesem Zeiger rumlöscht, geschlagen gehört <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="🙂"
    /> Das wäre sehr sehr schlechter Stil.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556326</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 30 Jul 2008 11:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 12:09:50 GMT]]></title><description><![CDATA[<p>7H3 N4C3R schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Sorry, mein Fehler</p>
</blockquote>
<p>...Und, no offense <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>
</blockquote>
<p>none taken! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556345</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 30 Jul 2008 12:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 12:17:23 GMT]]></title><description><![CDATA[<p>FreakyBKA schrieb:</p>
<blockquote>
<p>ich habe eine funktion die dem benutzer einen zeiger auf ein objekt zurückgibt. allerdings habe ich da momentan das problem, dass der benutzer das dahinterstehende objekt löschen könnte (z.B. mit delete). meine frage ist nun ob ich das verhindern kann, vllt mit const oder so?</p>
</blockquote>
<p>gib dem benutzer keine pointer, sondern IDs oder 'handles' für die objekte und ein paar funktionen, um mit den objekten zu arbeiten. dann hat er mit 'delete' u.ä. keine chance.<br />
<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/1556354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556354</guid><dc:creator><![CDATA[fricky]]></dc:creator><pubDate>Wed, 30 Jul 2008 12:17:23 GMT</pubDate></item><item><title><![CDATA[Reply to zeiger löschen verhindern on Wed, 30 Jul 2008 12:18:48 GMT]]></title><description><![CDATA[<p>Du kannst User-Programmer in C++ nicht vor der eigenen Dummheit schützen.<br />
Wenn du nur verhindern willst dass es unabsichtlich passiert, dann gib einen shared_ptr, oder eine selbst gestrickte Proxy-Klasse zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556356</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 30 Jul 2008 12:18:48 GMT</pubDate></item></channel></rss>