<?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[Muss ich bei diesem Array den Speicher freigeben?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Array im private-Abschnitt einer Klasse:</p>
<pre><code>static int const _DIM = 5 ;
Figur const* _brett[ _DIM ][ _DIM ] ;
</code></pre>
<p>und im Standardkonstruktor wird _brett initialisiert mit</p>
<pre><code>for ( int i = 0 ;  i &lt; _DIM ;  ++i )
			for ( int j = 0 ;  j &lt; _DIM ;  ++j )
				_brett[ i ][ j ] = NULL ;

		_brett[ 0 ][ 0 ] = new Springer( Figur::WEISS ) ;
		_brett[ 0 ][ 1 ] = new Laeufer( Figur::WEISS ) ;
// (...) usw.
</code></pre>
<p>Einerseits habe ich gelernt, dass &quot;zu jedem New ein Delete&quot; gehört. Andererseits handelt es sich aber auch nicht um ein dynamisches Array, da zur Compilezeit ja schon bekannt ist, welche Dimension das Array hat und sich diese auch nicht ändern kann und der Compiler doch dann eigentlich automatisch Code generieren könnte/würde, um den Speicher des Arrays wieder freizugeben.</p>
<p>Ist das richtig? Wird es automatisch wieder gelöscht, oder muss ich der Klasse einen Destruktor geben, um den Speicher wieder freizugeben?</p>
<p>Danke,<br />
Thilo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326408/muss-ich-bei-diesem-array-den-speicher-freigeben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 00:54:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326408.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Jun 2014 18:18:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Mon, 16 Jun 2014 18:18:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Array im private-Abschnitt einer Klasse:</p>
<pre><code>static int const _DIM = 5 ;
Figur const* _brett[ _DIM ][ _DIM ] ;
</code></pre>
<p>und im Standardkonstruktor wird _brett initialisiert mit</p>
<pre><code>for ( int i = 0 ;  i &lt; _DIM ;  ++i )
			for ( int j = 0 ;  j &lt; _DIM ;  ++j )
				_brett[ i ][ j ] = NULL ;

		_brett[ 0 ][ 0 ] = new Springer( Figur::WEISS ) ;
		_brett[ 0 ][ 1 ] = new Laeufer( Figur::WEISS ) ;
// (...) usw.
</code></pre>
<p>Einerseits habe ich gelernt, dass &quot;zu jedem New ein Delete&quot; gehört. Andererseits handelt es sich aber auch nicht um ein dynamisches Array, da zur Compilezeit ja schon bekannt ist, welche Dimension das Array hat und sich diese auch nicht ändern kann und der Compiler doch dann eigentlich automatisch Code generieren könnte/würde, um den Speicher des Arrays wieder freizugeben.</p>
<p>Ist das richtig? Wird es automatisch wieder gelöscht, oder muss ich der Klasse einen Destruktor geben, um den Speicher wieder freizugeben?</p>
<p>Danke,<br />
Thilo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404196</guid><dc:creator><![CDATA[Thilo87]]></dc:creator><pubDate>Mon, 16 Jun 2014 18:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Mon, 16 Jun 2014 18:26:00 GMT]]></title><description><![CDATA[<p>Zu jedem new gehört ein delete, richtig. Dein Array ist nicht mit new erzeugt, also solltest du es auch nicht mit delete freigeben. Die Einträge sind mit new erzeugt, also müssen sie mit delete freigegeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404198</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 16 Jun 2014 18:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Mon, 16 Jun 2014 18:27:31 GMT]]></title><description><![CDATA[<blockquote>
<p>der Compiler doch dann eigentlich automatisch Code generieren könnte/würde, um den Speicher des Arrays wieder freizugeben.</p>
</blockquote>
<p>(Ich nehme an, du meinst den Speicher auf den die Arrayelemente selbst zeigen)<br />
Ein paar Leute hatten dieselbe Idee wie du (RAII) und haben das ganze in ein Klassentemplate namens <code>vector</code> gepackt.</p>
<p>Aber zuerst die wichtigste Frage: Warum allozierst du den Speicher selbst? <strong>Warum</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404199</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Mon, 16 Jun 2014 18:27:31 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Mon, 16 Jun 2014 18:29:27 GMT]]></title><description><![CDATA[<p>Okay, die Einträge des Arrays muss ich also wieder freigeben.</p>
<blockquote>
<p>Aber zuerst die wichtigste Frage: Warum allozierst du den Speicher selbst? Warum?</p>
</blockquote>
<p>Das Array Figur const* _brett[ _DIM ][ _DIM ] war in der Aufgabe so vorgegeben. Da bleibt mir ja dann keine andere Möglichkeit, als den Speicher selber zu allozieren, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404200</guid><dc:creator><![CDATA[Thilo87]]></dc:creator><pubDate>Mon, 16 Jun 2014 18:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Tue, 17 Jun 2014 07:41:26 GMT]]></title><description><![CDATA[<p>Thilo87 schrieb:</p>
<blockquote>
<p>Das Array Figur const* _brett[ _DIM ][ _DIM ] war in der Aufgabe so vorgegeben. Da bleibt mir ja dann keine andere Möglichkeit, als den Speicher selber zu allozieren, oder?</p>
</blockquote>
<p>Wenn das so vorgegeben ist, dann musst Du das so machen und im Destruktor der Klasse, die das Spielfeld im Constructor füllt, auch wieder aufräumen.<br />
Behalte aber im Kopf dass in modernem C++ &quot;rohe&quot; Zeiger eigentlich nicht verwendet werden. Das Sticwort RAII ist ja schon gefallen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404256</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Tue, 17 Jun 2014 07:41:26 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Tue, 17 Jun 2014 08:24:08 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>Behalte aber im Kopf dass in modernem C++ &quot;rohe&quot; Zeiger eigentlich nicht verwendet werden. Das Sticwort RAII ist ja schon gefallen.</p>
</blockquote>
<p><strong>Besitzende</strong> &quot;rohe&quot; Zeiger sollten nicht verwendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404262</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 17 Jun 2014 08:24:08 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Tue, 17 Jun 2014 12:40:29 GMT]]></title><description><![CDATA[<p>btw. kommt man bei Polymorphie nur sehr schwer um rohe Zeiger herum,<br />
da die meisten Smartpointer keine polymorphen casts unterstützen.</p>
<p>und wenn zwei Figur* mit new Springer und new Laeufer belegt werden, dann sieht das extrem nach Polymorphie aus.<br />
(wobei in dem Fall auch ein std::array&lt;std::array&lt;std::unique_ptr&lt;Figur&gt;, _DIM&gt;, _DIM&gt; gehen würde, da braucht man sich dann nicht um die deletes kümmern)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404274</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Tue, 17 Jun 2014 12:40:29 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Tue, 17 Jun 2014 12:52:34 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>btw. kommt man bei Polymorphie nur sehr schwer um rohe Zeiger herum,<br />
da die meisten Smartpointer keine polymorphen casts unterstützen.</p>
</blockquote>
<p>Wer polymorphe Casts benutzen muss, ist ja auch selber schuld.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404276</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 17 Jun 2014 12:52:34 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Tue, 17 Jun 2014 14:31:19 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>da die meisten Smartpointer keine polymorphen casts unterstützen.</p>
</blockquote>
<p>Irrelevant, solange nicht der Besitz übertragen werden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404283</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 17 Jun 2014 14:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to Muss ich bei diesem Array den Speicher freigeben? on Tue, 17 Jun 2014 15:28:08 GMT]]></title><description><![CDATA[<p>DrakoXP schrieb:</p>
<blockquote>
<p>btw. kommt man bei Polymorphie nur sehr schwer um rohe Zeiger herum,<br />
da die meisten Smartpointer keine polymorphen casts unterstützen.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
<a href="http://www.cplusplus.com/reference/memory/dynamic_pointer_cast/" rel="nofollow">http://www.cplusplus.com/reference/memory/dynamic_pointer_cast/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404291</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 17 Jun 2014 15:28:08 GMT</pubDate></item></channel></rss>