<?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ückgabewert einer Funktion direkt an einen Pointer übergeben.]]></title><description><![CDATA[<p>ich wette, die lösung meines problems ist super-einfach, aber irgendwie hakt es gerade bei mir.</p>
<p>ich benutze eine Funktion (die nicht von mir geschrieben ist), welche ein Objekt erstellt und es zurück gibt. Ich möchte dieses Objekt an einen Zeiger übergeben, also diesen auf das Objekt zeigen lassen.</p>
<p>ich dachte es wäre so möglich:</p>
<p>X* x = &amp;createX();</p>
<p>quasi die Adresse des Rückgabewertes der Funktion an den Pointer übergeben. Funktioniert aber nicht.</p>
<p>Aber wie geht es sonst???</p>
<p>Danke für die Hilfe!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190350/rückgabewert-einer-funktion-direkt-an-einen-pointer-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 14:59:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190350.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Aug 2007 20:17:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 20:17:39 GMT]]></title><description><![CDATA[<p>ich wette, die lösung meines problems ist super-einfach, aber irgendwie hakt es gerade bei mir.</p>
<p>ich benutze eine Funktion (die nicht von mir geschrieben ist), welche ein Objekt erstellt und es zurück gibt. Ich möchte dieses Objekt an einen Zeiger übergeben, also diesen auf das Objekt zeigen lassen.</p>
<p>ich dachte es wäre so möglich:</p>
<p>X* x = &amp;createX();</p>
<p>quasi die Adresse des Rückgabewertes der Funktion an den Pointer übergeben. Funktioniert aber nicht.</p>
<p>Aber wie geht es sonst???</p>
<p>Danke für die Hilfe!</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349326</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Tue, 21 Aug 2007 20:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 20:22:15 GMT]]></title><description><![CDATA[<p>Die Lösung ist, das Ergebnis anständig zuzuweisen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349332</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 21 Aug 2007 20:22:15 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 20:29:41 GMT]]></title><description><![CDATA[<p>Wenn das objekt einen nützlichen Zuweisungsoperator hat kannst du das hier probieren:</p>
<pre><code class="language-cpp">X x = CreateX();
</code></pre>
<p>du kannst aber auch den hier probieren</p>
<pre><code class="language-cpp">X&amp; x = CreateX();
</code></pre>
<p>wahrscheinlich brauchst du letzteres.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349336</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Tue, 21 Aug 2007 20:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 20:44:11 GMT]]></title><description><![CDATA[<p>öhm ... danke erst mal für die antworten.<br />
ich weiß, dass ich etwas anständig zuweisen kann, aber der pointer hatte schon seine richtigkeit. wenn ich es anständig zuweise, dann verliere ich das objekt nacht dem verlassen des scopes. mir geht es darum das zu verhindern, ohne eine kopie erstellen zu müssen.</p>
<p>geht das überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349339</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Tue, 21 Aug 2007 20:44:11 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 21:47:00 GMT]]></title><description><![CDATA[<p>Jo, warum nicht</p>
<pre><code class="language-cpp">X* createX()
{
    X* bla = new X();
    return bla;
}

..

X* x = createX();
...
delete x;
</code></pre>
<p>?<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>
<p>edit: Allerdings ist es etwas unsauber, da der Benutzer von Funktionen nichts mit deren Speicherverwaltung zu tun haben sollte. Als sauberere Lösung könntest du eine Funktion <em>deleteX</em> schreiben, die das Objekt wieder löscht, oder besser den std::auto_ptr benutzen (oder einer der boost-smart-Pointer, <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-134971.html" rel="nofollow">hab zufällig vor 5 Minuten einen verdammt guten Artikel dazu gelesen</a>) <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>Mit den Boost-Smart-Pointern hab ich's noch nicht so raus (kannst du dir aber leicht aus dem Artikel erarbeiten), mit dem auto_ptr würde es so aussehen:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;
#using namespace std;

auto_ptr&lt;X&gt; createX()
{
    auto_ptr&lt;X&gt; x( new X() );
    ..
    return x;
}

..

auto_ptr&lt;X&gt; x = createX();
// Hier musst du x nämlich nicht mehr freigeben, wird nach dem Verlassen des Scopes vernichtet
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1349362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349362</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 21 Aug 2007 21:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 22:10:08 GMT]]></title><description><![CDATA[<p>Chris++ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">X&amp; x = CreateX();
</code></pre>
</blockquote>
<p>Das is kein legales C++ nicht.<br />
(MSVC mit &quot;Microsoft Extensions=on&quot; frisst es nur trotzdem)<br />
Du kannst ne non-const Referenz nicht an ne rvalue binden.<br />
(Mit &quot;X const&amp;&quot; wäre es OK)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349385</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 21 Aug 2007 22:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Tue, 21 Aug 2007 22:36:52 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Du kannst ne non-const Referenz nicht an ne rvalue binden.<br />
(Mit &quot;X const&amp;&quot; wäre es OK)</p>
</blockquote>
<p>Wäre das dann eigentlich das gleiche wie &quot;<em>const X&amp;</em>&quot;? Ich hab das mit den verschiedenen const-Dingern noch nie verstanden <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/1349391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349391</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Tue, 21 Aug 2007 22:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 06:38:09 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Du kannst ne non-const Referenz nicht an ne rvalue binden.<br />
(Mit &quot;X const&amp;&quot; wäre es OK)</p>
</blockquote>
<p>Wäre das dann eigentlich das gleiche wie &quot;<em>const X&amp;</em>&quot;? Ich hab das mit den verschiedenen const-Dingern noch nie verstanden <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>Ja, wäre es. Das 'const' ist eigentlich ganz einfach. Es kann halt sowohl vor als auch nach dem Typennamen stehen und bindet vorzugsweise nach links. Wenn man sich an die Konvention hält, es nur rechts ranzuschreiben, dann geht es sogar noch einfacher:</p>
<pre><code class="language-cpp">T const * const * const * …
</code></pre>
<p>… kann man beliebig weiterführen. Ein gegebenes 'const' bezieht sich immer auf den linksstehenden Teilausdruck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349484</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 22 Aug 2007 06:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:38:54 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Jo, warum nicht</p>
<pre><code class="language-cpp">X* createX()
{
    X* bla = new X();
    return bla;
}

..

X* x = createX();
...
delete x;
</code></pre>
<p>?<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>
<p>edit: Allerdings ist es etwas unsauber, da der Benutzer von Funktionen nichts mit deren Speicherverwaltung zu tun haben sollte. Als sauberere Lösung könntest du eine Funktion <em>deleteX</em> schreiben, die das Objekt wieder löscht, oder besser den std::auto_ptr benutzen (oder einer der boost-smart-Pointer, <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-134971.html" rel="nofollow">hab zufällig vor 5 Minuten einen verdammt guten Artikel dazu gelesen</a>) <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>Mit den Boost-Smart-Pointern hab ich's noch nicht so raus (kannst du dir aber leicht aus dem Artikel erarbeiten), mit dem auto_ptr würde es so aussehen:</p>
<pre><code class="language-cpp">#include &lt;memory&gt;
#using namespace std;

auto_ptr&lt;X&gt; createX()
{
    auto_ptr&lt;X&gt; x( new X() );
    ..
    return x;
}

..

auto_ptr&lt;X&gt; x = createX();
// Hier musst du x nämlich nicht mehr freigeben, wird nach dem Verlassen des Scopes vernichtet
</code></pre>
</blockquote>
<p>natürlich könnte das so funktionieren, aber die Funktion createX ist nicht von mir geschrieben, daher kann ich die nicht so verändern. Gibt es denn keine Möglichkeit einfach nur die Adresse des Rückgabewertes einem Pointer zu überreichen??</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349589</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:42:23 GMT]]></title><description><![CDATA[<p>anchelito schrieb:</p>
<blockquote>
<p>wenn ich es anständig zuweise, dann verliere ich das objekt nacht dem verlassen des scopes. mir geht es darum das zu verhindern, ohne eine kopie erstellen zu müssen.</p>
</blockquote>
<p>Wenn du die Funktion nicht beeinflussen kannst, geht das nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349591</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:45:34 GMT]]></title><description><![CDATA[<p>Nein, gibt es nicht. wenn die Funktion einen Wert zurückgibt, dann wird der in einer temporären Variablen zwischengelagert - und die wird am Ende der Anweisung wieder vernichtet, so daß jeder Zeiger, den du dort drauf gelegt hast, ins Nirvana zeigen wird.</p>
<p>Ergo: du mußt dir die Rückgabe in eine eigene Variable kopieren, um sie weiter verwenden zu können:</p>
<pre><code class="language-cpp">X x = createX();
//oder - wenn du unbedingt Zeiger brauchst:
X* x = new X(createX());
</code></pre>
<p>(wenn die Funktion selber einen Zeiger/Referenz zurückgibt, hast du gute Chancen, daß das dahinterliegende Objekt noch etwas überlebt (außer der Autor hat Mist gebaut und eine Referenz auf eine lokale Variable geliefert) - und dann ist es auch legal, deren Adresse zu bestimmen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349594</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:45:34 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:48:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2803">@MFK</a>:</p>
<p>hmm ... das ist ja doof.<br />
Also muss ich das Objekt normal rausholen, Speicher allokieren und eine Kopie in den Speicher schreiben? (und die Kopie geht verloren).</p>
<p>Aber das ist ja schlussendlich voll die Performance-Verschwendung, als wenn ich einfach irgendwie auf das bereits erstellte Objekt zeigen könnte und gut ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349595</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:49:36 GMT]]></title><description><![CDATA[<p>anchelito schrieb:</p>
<blockquote>
<p>Aber das ist ja schlussendlich voll die Performance-Verschwendung, als wenn ich einfach irgendwie auf das bereits erstellte Objekt zeigen könnte und gut ist.</p>
</blockquote>
<p>Vermutlich - aber darüber solltest du dich bei dem *** beschweren, der die createX()-Funktion geschrieben hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349599</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:49:36 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:50:11 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>:</p>
<p>Klingt logisch, ist aber irgendwie schade, aus den bereits erwähnten Gründen meines letzten Posts.</p>
<p>Danke an alle für die Hilfe!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349600</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:52:20 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>anchelito schrieb:</p>
<blockquote>
<p>Aber das ist ja schlussendlich voll die Performance-Verschwendung, als wenn ich einfach irgendwie auf das bereits erstellte Objekt zeigen könnte und gut ist.</p>
</blockquote>
<p>Vermutlich - aber darüber solltest du dich bei dem *** beschweren, der die createX()-Funktion geschrieben hat.</p>
</blockquote>
<p>Aber ihr liefert doch auch nicht immer einen Zeiger zurück bei ner Funktion oder doch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349602</guid><dc:creator><![CDATA[anchelito]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert einer Funktion direkt an einen Pointer übergeben. on Wed, 22 Aug 2007 08:55:22 GMT]]></title><description><![CDATA[<p>Wenn es sich lohnt, schon (aber normalerweise baue ich nichtmal eine CreateX()-Funktion, sondern einen vernünftigen Ctor für X).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1349606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1349606</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 22 Aug 2007 08:55:22 GMT</pubDate></item></channel></rss>