<?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[Frage zur Speicherfreigabe]]></title><description><![CDATA[<p>Angenommen ich habe so eine Klasse:</p>
<pre><code class="language-cpp">class Data {
static const int bufferSize = 100;
char buffer[buffersize];
}
</code></pre>
<p>Muss ich dann einen Destruktor bauen in dem ich den buffer explizit wieder freigeben muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277838/frage-zur-speicherfreigabe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 17:22:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277838.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Nov 2010 11:06:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zur Speicherfreigabe on Thu, 25 Nov 2010 11:06:46 GMT]]></title><description><![CDATA[<p>Angenommen ich habe so eine Klasse:</p>
<pre><code class="language-cpp">class Data {
static const int bufferSize = 100;
char buffer[buffersize];
}
</code></pre>
<p>Muss ich dann einen Destruktor bauen in dem ich den buffer explizit wieder freigeben muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985526</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Thu, 25 Nov 2010 11:06:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherfreigabe on Thu, 25 Nov 2010 11:15:25 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Angenommen ich habe so eine Klasse:</p>
<pre><code class="language-cpp">class Data {
static const int bufferSize = 100;
char buffer[buffersize];
}
</code></pre>
<p>Muss ich dann einen Destruktor bauen in dem ich den buffer explizit wieder freigeben muss?</p>
</blockquote>
<p>Nein.<br />
Aber es müsste so heissen:</p>
<pre><code class="language-cpp">char buffer[bufferSize];
</code></pre>
<p>Und nach der schliessenden geschweiften Klammer am Ende fehlt ein Semikolon <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985533</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Thu, 25 Nov 2010 11:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherfreigabe on Thu, 25 Nov 2010 11:19:25 GMT]]></title><description><![CDATA[<p>Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985537</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Thu, 25 Nov 2010 11:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zur Speicherfreigabe on Thu, 25 Nov 2010 12:12:36 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Angenommen ich habe so eine Klasse:</p>
<pre><code class="language-cpp">class Data {
  static const int bufferSize = 100;
  char buffer[bufferSize];
};
</code></pre>
<p>Muss ich dann einen Destruktor bauen in dem ich den buffer explizit wieder freigeben muss?</p>
</blockquote>
<p>Ich schätze, Du stellst diese Frage, weil Du nicht genau weißst, was ein Feld ist. Wenn Du das [] weglässt, wird es genau ein char-Objekt als Datenelement in der Klasse geben. Da muss man natürlich nichts extra freigeben. Wenn Du [1] anhängst, gibt es auch nur dieses eine char-Objekt. Der Zugriff sieht etwas anders aus, aber das Speicherlayout der Klasse läuft auf dasselbe hinaus. Wenn Du [n] anhängst, landen eben n char-Objekte in der Klasse, die sich über die entsprechende Indizes ansprechen lassen.</p>
<p>Vor allen Dingen ist ein 'buffer' hier <em>nicht</em> so etwas wie eine Referenz, welche nur auf das Feld zeigt, wie es in anderen Sprachen der Fall ist (zB Java). In C++ gibt es nur diese Indirektion, wenn Du sie explizit verlangst.</p>
<p>Hier wird 'buffer' natürlich als Teil von 'Data' ordnungsgemäß von ganz alleine zerstört, wenn das entsprechende Data-Objekt zerstört wird.</p>
<p>Wenn Du allerdings so Dinge schreibst wie das hier:</p>
<pre><code class="language-cpp">class Data {
  static const int bufferSize = 100;
  char* buffer;
};
</code></pre>
<p>dann ist 'buffer' eben nur ein Zeiger. Der Zeiger wird als Datenelement automatisch mit einem Data-Objekt zerstört, das worauf er möglicherweise zeigt natürlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1985555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1985555</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 25 Nov 2010 12:12:36 GMT</pubDate></item></channel></rss>