<?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[Rückgabe von Zeigern und Referenzen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe immer das Problem, wenn ich nach einer Zeit<br />
eine Methode aufrufe, die einen Zeiger oder eine Referenz<br />
zurückliefert, dann weiß ich nicht mehr, ob das Objekt<br />
für die Rückgabe erzeugt wurde oder nicht...</p>
<p>Woran macht ihr das bei eurem Code aus?<br />
Wie erkennt ihr das wieder?</p>
<p>Gebt ihr z. B. bei bestehenden Objekten ein Object<br />
zurück sonst ein Object&amp; ?</p>
<p>Aber wie mach ich das mit Zeigern und der möglichen<br />
Rückgabe NULL?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/119215/rückgabe-von-zeigern-und-referenzen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 22:07:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119215.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Aug 2005 15:36:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabe von Zeigern und Referenzen on Mon, 29 Aug 2005 15:36:49 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe immer das Problem, wenn ich nach einer Zeit<br />
eine Methode aufrufe, die einen Zeiger oder eine Referenz<br />
zurückliefert, dann weiß ich nicht mehr, ob das Objekt<br />
für die Rückgabe erzeugt wurde oder nicht...</p>
<p>Woran macht ihr das bei eurem Code aus?<br />
Wie erkennt ihr das wieder?</p>
<p>Gebt ihr z. B. bei bestehenden Objekten ein Object<br />
zurück sonst ein Object&amp; ?</p>
<p>Aber wie mach ich das mit Zeigern und der möglichen<br />
Rückgabe NULL?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860777</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 29 Aug 2005 15:36:49 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe von Zeigern und Referenzen on Mon, 29 Aug 2005 15:52:40 GMT]]></title><description><![CDATA[<p>Gib mal ein Beispiel, ich werd aus deinem Text nicht schlau <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>
<p>Gibst du nun einen Zeiger zurück dem du in der Funktion Speicher zugewiesen hast? Sowieso nicht gut. Bzw. hatte der vorher schon Speicher? Dann gibts ja gar nichts zu wissen. Worum gehts? <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 SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860783</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Mon, 29 Aug 2005 15:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe von Zeigern und Referenzen on Mon, 29 Aug 2005 18:39:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Test{
  private:
    Object o;
  public:
    Object* getObject();
}
</code></pre>
<p>woher weiß ich jetzt, ob ich das zurückgegebene Object zerstören muss oder nicht?</p>
<pre><code class="language-cpp">Object* Test::getObject(){
  return new Object(o);
}

// oder

Object* Test::getObject(){
  return &amp;o;
}
</code></pre>
<p>Gibt es da irgendwelche Konventionen? Z. B. dass alle getter-Rückgaben nicht zerstört werden dürfen und die anderen müssen? Wie haltet ihr das?<br />
Also, dass man es nur mit Hilfe der Header-Dateien erkennt?</p>
<p>Für Objekte (!=NULL) könnte man ja etwa so etwas machen:</p>
<pre><code class="language-cpp">Object Test::getObject(); // bei Objekten, die nicht zerstört werden dürfen
Object&amp; Test::getObject(); // bei Kopien
</code></pre>
<p>Gibt es irgendwelche Konventionen oder handhabt ihr das?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860882</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 29 Aug 2005 18:39:28 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe von Zeigern und Referenzen on Mon, 29 Aug 2005 18:45:28 GMT]]></title><description><![CDATA[<p>Alles was von einer Funktion / Methode kommt und manuell deleted werden muss is shice... Dadurch entstehen nur Leaks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860890</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Mon, 29 Aug 2005 18:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe von Zeigern und Referenzen on Mon, 29 Aug 2005 18:54:48 GMT]]></title><description><![CDATA[<p>Wenn ich eine Methode habe die für den Aufrufer extra ein Objekt erzeugt, dann geht das aus dem Namen hervor (zB. createObject() ) und ob ich solche Objekte löschen muss oder nicht schlage ich in der Doku nach, manchmal übernimmt das Löschen die Klasse selber und manchmal muss man es selbst tun (QT zum Beispiel übernimmt das Löschen von Objekten sehr oft für einen, bzw. man muss es nicht löschen, wenn man nicht will).<br />
Wenn du mit new erzeugte Objekte rausgibst (extra für den Aufrufer erzeugst) und er es löschen soll bzw. darum kümmern soll/muss, dann wäre es gut, wenn du nen smart pointer zurückgibst. Dann kann der Benutzer den für sich löschen lassen, oder es selbst tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860892</guid><dc:creator><![CDATA[User---]]></dc:creator><pubDate>Mon, 29 Aug 2005 18:54:48 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe von Zeigern und Referenzen on Mon, 29 Aug 2005 19:06:03 GMT]]></title><description><![CDATA[<p>Also, normalerweise kommt es doch darauf an, wer das Objekt angelegt hat, das zurück gegeben wird. Wenn Test das Objekt intern selbst erzeugt hat, werde ich mich hüten dieses zu löschen. Das soll Test selbst machen. Wenn Test das Objekt von woanders her bekommen hat, hat der andere (der es erzeugt hat) dafür zu sorgen, das er es löscht.</p>
<pre><code class="language-cpp">Object* Test::getObject(){
  return new Object(o);
}
</code></pre>
<p>In dem obigen Bsp. ist ganz einfach der Methodenname falsch! Das ist keine get-Methode!!! Total falsche Bezeichnung. Wenn dann eher:</p>
<pre><code class="language-cpp">Object* Test::createObject(){
  return new Object(o);
}

// oder

Object* Test::newObject(){
  return new Object(o);
}
</code></pre>
<p>Am besten wäre aber, wenn man da einen std::auto_ptr zurück gibt, dann gibt es keine Missverständnisse. Irgendwo muß ja der auto_ptr mal zum Einsatz kommen. Und hier wäre er ideal. Dann muß sich niemand um die Löschung kümmern. Ein boost::shared_ptr wäre natürlich auch i.O.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860897</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 29 Aug 2005 19:06:03 GMT</pubDate></item></channel></rss>