<?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[new und delete[] - Frage]]></title><description><![CDATA[<p>Ich habe ein Programm, in dem ich in einer Funktion <code>new</code> und am Ende der Funktion <code>delete[]</code> aufrufe. Ist das <code>delete[]</code> notwendig oder wird der Speicher automatisch freigegeben, sobald der Scope des mit <code>new</code> gespeicherten Speichers endet (nach <code>return</code> )?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275886/new-und-delete-frage</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 14:51:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275886.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Oct 2010 12:18:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new und delete[] - Frage on Fri, 22 Oct 2010 12:18:56 GMT]]></title><description><![CDATA[<p>Ich habe ein Programm, in dem ich in einer Funktion <code>new</code> und am Ende der Funktion <code>delete[]</code> aufrufe. Ist das <code>delete[]</code> notwendig oder wird der Speicher automatisch freigegeben, sobald der Scope des mit <code>new</code> gespeicherten Speichers endet (nach <code>return</code> )?</p>
<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969082</guid><dc:creator><![CDATA[HELPVISTAWIN7]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to new und delete[] - Frage on Fri, 22 Oct 2010 12:34:13 GMT]]></title><description><![CDATA[<p>HELPVISTAWIN7 schrieb:</p>
<blockquote>
<p>Ich habe ein Programm, in dem ich in einer Funktion <code>new</code> und am Ende der Funktion <code>delete[]</code> aufrufe. Ist das <code>delete[]</code> notwendig oder wird der Speicher automatisch freigegeben, sobald der Scope des mit <code>new</code> gespeicherten Speichers endet (nach <code>return</code> )?</p>
</blockquote>
<p>Grundsätzlich werden Heapvariablen (new/new[]) nicht automatisch freigegeben. C++ hat keinen Garbagecollector. Stackvariablen werden am Ende des scopes freigegeben.</p>
<p>Grundsätzlich gilt zu jedem new[] ein delete[], und zu jedem new ein delete.</p>
<p>Wenn man schon Heapvariablen benötigt, gibt es Alternativen zur manuellen Freigabe (z.B. &quot;Smartpointer&quot;, Pointercontainer von boost...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969090</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to new und delete[] - Frage on Fri, 22 Oct 2010 12:50:24 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>Wenn man schon Heapvariablen benötigt,</p>
</blockquote>
<p>Wobei man sagen sollte, dass der hier beschriebene Fall von am anfang der Funktion reservieren und am Ende freigeben ein Paradebeispiel für den Fall ist, in dem man Heapvariablen <strong>nicht</strong> braucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969104</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:50:24 GMT</pubDate></item><item><title><![CDATA[Reply to new und delete[] - Frage on Fri, 22 Oct 2010 12:59:21 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>asc schrieb:</p>
<blockquote>
<p>Wenn man schon Heapvariablen benötigt,</p>
</blockquote>
<p>Wobei man sagen sollte, dass der hier beschriebene Fall von am anfang der Funktion reservieren und am Ende freigeben ein Paradebeispiel für den Fall ist, in dem man Heapvariablen <strong>nicht</strong> braucht.</p>
</blockquote>
<p>Die Aussage mag häufig stimmen, gilt aber nicht allgemein (z.B. benötige ich dies recht häufig, da ich an der Arbeit ein Framework verwende das Heapvariablen erfordert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969111</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 22 Oct 2010 12:59:21 GMT</pubDate></item><item><title><![CDATA[Reply to new und delete[] - Frage on Fri, 22 Oct 2010 13:06:46 GMT]]></title><description><![CDATA[<p>HELPVISTAWIN7 schrieb:</p>
<blockquote>
<p>Ich habe ein Programm, in dem ich in einer Funktion <code>new</code> und am Ende der Funktion <code>delete[]</code> aufrufe. Ist das <code>delete[]</code> notwendig oder wird der Speicher automatisch freigegeben, sobald der Scope des mit <code>new</code> gespeicherten Speichers endet (nach <code>return</code> )?</p>
</blockquote>
<p>new/delete bzw new[]/delete[] ist gerade dazu da, dass man als Benutzer die Lebenszeit des reservierten Speichers genau kontrollieren kann. Wenn Du über new[] Speicher reservierst und dir den resultierenden Zeiger als automatische Variable merkst:</p>
<pre><code class="language-cpp">void foo() {
  int* p = new int;
}
</code></pre>
<p>dann gibt es hier zwei Objekte, die eine Rolle spielen.<br />
1. Die Zeigervariable p liegt im automatischen Speicherbereich und wird damit automatisch beim Verlassen der Funktion aufgeräumt.<br />
2. Das per new erzeugte int-Objekt liegt im Freispeicher. Wenn Du Dich nicht selbst um das Löschen kümmerst, bleibt das Objekt bis zum Ende des Programms im Speicher hängen.</p>
<p>In diesen Beispiel hat die Funktion foo ein Speicherleck, denn der reservierte Speicher wird nie freigegeben.</p>
<p>new[]/delete[] braucht man höchst selten. Die besseren Alternativen sind die Standard-Container. Um new/delete kommt man auch mahcnmal rum. Wenn nicht, sollte man die Verantwortung, Objekte zu löschen oder andere Resourcen freizugeben, frühstmöglich an andere Objekte delegieren. So kann man zB ein auto_ptr-Objekt oder einen Boost-Pointer-Container ein dynamisch erzeugtes Objekt &quot;besitzen lassen&quot; so dass man sich nicht mehr selbst und das Freigeben kümmern muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1969112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1969112</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 22 Oct 2010 13:06:46 GMT</pubDate></item></channel></rss>