<?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[heap vs stack]]></title><description><![CDATA[<p>hallo,<br />
noch eine frage:<br />
wenn ich eine klasse mit<br />
Person p(&quot;hans&quot;);<br />
oder<br />
Person(&quot;hans&quot;);<br />
instantiiere, landet die doch auf dem stack, oder?<br />
Was passiert also hier:</p>
<pre><code class="language-cpp">Person create() {
	Person p(&quot;hans peter&quot;);
	return p;
}
...in main:
	Person p = create();
	cout &lt;&lt; p.getName() &lt;&lt; endl;
</code></pre>
<p>wird p kopiert, im stack verschoben, so dass das objekt in der main methode verfügbar ist, oder...<br />
mir ist aufgefallen, dass qt immer objekte direkt zurückgibt, nie pointer. wann verwendet man was?<br />
danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240178/heap-vs-stack</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 03:28:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240178.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 May 2009 09:52:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 09:52:01 GMT]]></title><description><![CDATA[<p>hallo,<br />
noch eine frage:<br />
wenn ich eine klasse mit<br />
Person p(&quot;hans&quot;);<br />
oder<br />
Person(&quot;hans&quot;);<br />
instantiiere, landet die doch auf dem stack, oder?<br />
Was passiert also hier:</p>
<pre><code class="language-cpp">Person create() {
	Person p(&quot;hans peter&quot;);
	return p;
}
...in main:
	Person p = create();
	cout &lt;&lt; p.getName() &lt;&lt; endl;
</code></pre>
<p>wird p kopiert, im stack verschoben, so dass das objekt in der main methode verfügbar ist, oder...<br />
mir ist aufgefallen, dass qt immer objekte direkt zurückgibt, nie pointer. wann verwendet man was?<br />
danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704704</guid><dc:creator><![CDATA[anfängerpeter]]></dc:creator><pubDate>Sun, 03 May 2009 09:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 10:12:45 GMT]]></title><description><![CDATA[<p>Ja, bei deinem Beispiel landen die Sachen auf dem Stack. Heap-Sachen verwendet man, um die Lebensdauer zu verlängern (mit new erzeugte Objekte werden ja nicht am Ende der Funktion destruiert) oder um eine Variable auf &quot;leer&quot; setzen zu können (Zeiger auf NULL).<br />
In deinem Beispiel werden zwei Objekte vom Typ &quot;Peter&quot; erstellt, einmal in &quot;create&quot; und dann eins in &quot;main&quot;. Verschoben werden Objekte nicht. Manchmal gibt's unkopierbare Typen, da bräuchtest du hier &quot;new&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704708</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sun, 03 May 2009 10:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 11:13:20 GMT]]></title><description><![CDATA[<p>Rein Codemässig werden hier 2 Objekte erzeugt, allerdings darf man sich darauf nicht verlassen, da viele Compiler das wegoptimieren können.</p>
<p><strong>Named return value optimization:</strong><br />
<a href="http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704756</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 May 2009 11:13:20 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 11:50:52 GMT]]></title><description><![CDATA[<p>ah, danke.<br />
und weiß jemand wie das in QT funktioniert? Es macht ja keinen sinn langlebige objekte wie widgets oder strings oder datenbankverbindungen auf dem stack zu speichern, aber es wird anscheinend so gemacht. Gibt es irgendeinen vorteil das objekt auf dem stack zu allokieren (auch noch 2 mal) wenn ich es öfters als in einer methode brauche?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704768</guid><dc:creator><![CDATA[anfängerpeter]]></dc:creator><pubDate>Sun, 03 May 2009 11:50:52 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 11:55:20 GMT]]></title><description><![CDATA[<p>Du solltest nicht in Stack und Heap denken, da dir das (von der Programmiererseite) egal sein kann. Wichtig ist der Unterschied von automatischem Speicher und dynamischem. Sprich automatischen (du nennst das Stack) Speicher musst du nicht selbst aufräumen. Der wird automatisch aufgeräumt. Und dynamischer (heap, also mit new allokierter Speicher) nicht. Das heisst, dass du dich da selbst um das aufräumen kümmern musst.<br />
Somit sollte gelten, dass du solange, wie möglich automatischen Speicher benutzt, da das sicherer ist, als dynamischer. (Weil du keine Angst vor Memoryleaks/ungültigem Speicher haben musst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704776</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 May 2009 11:55:20 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 12:08:30 GMT]]></title><description><![CDATA[<p>ah vielen dank,<br />
wann sollte ich dann überhaupt den dynamischen speicher benutzen?<br />
könnte/sollte ich die ganzen new allokationen und die pointer aus meinem ersten beispiel (<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-240144.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-240144.html</a>) also lieber entfernen?<br />
danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704784</guid><dc:creator><![CDATA[anfängerpeter]]></dc:creator><pubDate>Sun, 03 May 2009 12:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 12:12:19 GMT]]></title><description><![CDATA[<p>anfängerpeter schrieb:</p>
<blockquote>
<p>ah vielen dank,<br />
wann sollte ich dann überhaupt den dynamischen speicher benutzen?</p>
</blockquote>
<p>Dann, wenn du zum Zeitpunkt an dem du dein Programm schreibst noch nicht sagen kannst, wieviele Sachen gespeichert werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704785</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 03 May 2009 12:12:19 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 12:15:12 GMT]]></title><description><![CDATA[<p>Grundsätzlich solltest du dir das leben nicht schwerer machen, als es ist. Also nimm solange es geht automatischen Speicher und dynamischen nur, wenn du ihn wirklich brauchst. (Also wenn die Lebenszeit länger als der Scope sein soll, wenn die Grösser zur Kompilierzeit unbekannt ist oder aber auch bei polymorphie).</p>
<p>Es kommt halt ganz auf den Anwendungszweck an, ob du wirklich dynamischen Speicher brauchst. Sicher sinvoll ist es dynamischen Speicher irgendwie zu wrappen, wie es z.B <code>std::string</code> oder <code>std::vector</code> tun, damit der Benutzer keine Probleme damit bekommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704788</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 03 May 2009 12:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to heap vs stack on Sun, 03 May 2009 23:27:43 GMT]]></title><description><![CDATA[<p>Es gibt noch ein anderes Problem. Dir steht als User nicht unbedingt ein umlimitierter Stack zur Verfuegung, jedoch ein ein heute nahezu unlimitierter Heap. Grosse Datenmengen werden deshalb besser im Heap allociert (new-Operator oder C-Style mit malloc/calloc), um hier einen Stack-Overflow zu vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705063</guid><dc:creator><![CDATA[hartmut1164]]></dc:creator><pubDate>Sun, 03 May 2009 23:27:43 GMT</pubDate></item></channel></rss>