<?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[Wo ist das Objekt abgelegt?]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>wo ist der Funktionsparameter abgelegt:</p>
<pre><code class="language-cpp">void MyFunc(std::string &amp;s) {}

int main() {
	std::string s1;
	MyFunc(s1); // Hier liegt der string auf dem Stack. Es wird zu keinem Zeitpunkt eine Kopie gemacht. Korrekt?

	std::string *s2 = new std::string(&quot;abc&quot;);
	MyFunc(s2); // Hier liegt der string auf dem Heap. Es wird auch keine Kopie gemacht?
}
</code></pre>
<p>Also ist die Referenz ein Pointer. Der einmal auf den Stack steigt und einmal auf dem Heap?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190221/wo-ist-das-objekt-abgelegt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 13:23:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190221.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Aug 2007 19:54:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Mon, 20 Aug 2007 19:54:37 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>wo ist der Funktionsparameter abgelegt:</p>
<pre><code class="language-cpp">void MyFunc(std::string &amp;s) {}

int main() {
	std::string s1;
	MyFunc(s1); // Hier liegt der string auf dem Stack. Es wird zu keinem Zeitpunkt eine Kopie gemacht. Korrekt?

	std::string *s2 = new std::string(&quot;abc&quot;);
	MyFunc(s2); // Hier liegt der string auf dem Heap. Es wird auch keine Kopie gemacht?
}
</code></pre>
<p>Also ist die Referenz ein Pointer. Der einmal auf den Stack steigt und einmal auf dem Heap?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348545</guid><dc:creator><![CDATA[Student_x]]></dc:creator><pubDate>Mon, 20 Aug 2007 19:54:37 GMT</pubDate></item><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Mon, 20 Aug 2007 20:09:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void MyFunc(std::string &amp;s) {} 

int main() { 
    std::string s1; 
    MyFunc(s1);

    std::string *s2 = new std::string(&quot;abc&quot;); 
    MyFunc(*s2); // Wo eine Referenz erwartet wird, darfst du keinen Pointer übergeben
}
</code></pre>
<p>Sonst dürftest du recht ahben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348549</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Mon, 20 Aug 2007 20:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Mon, 20 Aug 2007 20:11:03 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Naja damit das zweite auch kompilierbar wird must du aber erstmal noch dereferenzieren.</p>
<pre><code class="language-cpp">MyFunc(*s2);
</code></pre>
<p>Und ja dann liegt s im Heap. Interessiert in der Funktion auch niemanden.</p>
<p>/Edit : zu langsam</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348550</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 20 Aug 2007 20:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Mon, 20 Aug 2007 20:54:46 GMT]]></title><description><![CDATA[<p>Oh, das dereferenzieren hatte ich vergessen. Vielen Dank Darthdespotism und Akari <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/1348569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348569</guid><dc:creator><![CDATA[Student_x]]></dc:creator><pubDate>Mon, 20 Aug 2007 20:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Tue, 21 Aug 2007 07:33:19 GMT]]></title><description><![CDATA[<p>Student_x schrieb:</p>
<blockquote>
<p>Oh, das dereferenzieren hatte ich vergessen. ...</p>
</blockquote>
<p>Wenn Du schon von &quot;vergessen&quot; sprichst: Bei der zweiten Lösung darfst Du das &quot;delete&quot; nicht vergessen.</p>
<p>Ergänzung1: &quot;Pointer&quot; bedeutet nicht automatisch, dass das Objekt auf dem Stack liegt:</p>
<pre><code class="language-cpp">int main() {
    std::string s1; // HIER liegt der string auf dem Stack
    MyFunc(s1); 
    std::string *s2 = &amp;s1; // Der string liegt immer noch auf dem Stack
    MyFunc(*s2); 
}
</code></pre>
<p>Ergänzung2: Zwar liegt das string-Objekt selbst auf dem Stack/Heap, aber es selbst kann seine internen Daten durchaus woanders hinlegen:</p>
<pre><code class="language-cpp">struct MyObj {
   int* i; // Pointer i kann auf dem Stack liegen ...
   MyObj() : i(new int[10]) {} // ... und zeigt auf 10 ints, die auf dem Heap liegen
   ~MyObj() { delete[] i; }
};
</code></pre>
<p>Ich würde davon ausgehen (obwohl das implementationsspezifisch ist und anders gelöst werden kann), dass das bei string (zumindestens bei längeren) auch so ist.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348697</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 21 Aug 2007 07:33:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Tue, 21 Aug 2007 09:11:32 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a>: Das mit dem delete war mir auch klar. <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="🙂"
    /><br />
Es ging mir nur darum wo die Objekte liegen und ob nicht vielleicht eine Kopie gemacht wird. Eigentlich werden ja die einer Funktion übergebenen Parameter auf den Stack geleget. Wenn ich also std::string&amp; als Parameter übergebe dachte ich das das Objekt vielleicht vom Heap auf den Stack verschoben wird. Hier wird scheibar sowas wie ein Pointer auf dem Stack übergeben, ohne das ich beim Ansprechen des Strings die Dereferenzierung vornehmen muß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348781</guid><dc:creator><![CDATA[student_x]]></dc:creator><pubDate>Tue, 21 Aug 2007 09:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Wo ist das Objekt abgelegt? on Tue, 21 Aug 2007 09:14:34 GMT]]></title><description><![CDATA[<p>student_x schrieb:</p>
<blockquote>
<p>Hier wird scheibar sowas wie ein Pointer auf dem Stack übergeben, ohne das ich beim Ansprechen des Strings die Dereferenzierung vornehmen muß.</p>
</blockquote>
<p>Ja, so sieht's aus - es wird eine Referenz auf den Stack gepackt. Und die kannst du (stark vereinfacht) auch als einen selbst-dereferenzierenden Zeiger ansehen.</p>
<p>(technisch gesehen ist eine Referenz ein Alias-Name für ein irgendwo anders existierendes Objekt - wo das ist, spielt für den Compiler keine Rolle)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1348783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1348783</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 21 Aug 2007 09:14:34 GMT</pubDate></item></channel></rss>