<?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[Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse.]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ne Klasse mit nem Vector drin:</p>
<pre><code class="language-cpp">class A
{
	vector &lt;string&gt; a;
public:
	void add_a (string s)
	{
		a.push_back(s);
	}
};
</code></pre>
<p>In einer Erzeugerfunktion werden Klassen generiert:</p>
<pre><code class="language-cpp">A* Create_A()
{
	A* pA = new A;
	if ( pA != NULL )
		pA-&gt;add_a(&quot;a&quot;);
	return pA;
}
</code></pre>
<p>Wie ist das mit der Freigabe des Speichers für den Vector, wird beim delete in Zeile 10 der vom Vector belegte Speicher automatisch freigegeben?<br />
Der Aufruf von delete ist ja kein Verlassen eines Blocks (Scopes) <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="😕"
    /></p>
<pre><code class="language-cpp">int main() 
{ 
	A* ppA[10];
	for ( int i=0; i&lt;10; i++ )
	{
		ppA[i] = Create_A();
	}

	for ( int i=0; i&lt;10; i++ )
		delete ppA[i];
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/245329/speicherfreigabe-eines-vectors-in-dynamisch-erzeugter-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 21:55:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245329.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 12 Jul 2009 21:07:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse. on Sun, 12 Jul 2009 21:07:30 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ne Klasse mit nem Vector drin:</p>
<pre><code class="language-cpp">class A
{
	vector &lt;string&gt; a;
public:
	void add_a (string s)
	{
		a.push_back(s);
	}
};
</code></pre>
<p>In einer Erzeugerfunktion werden Klassen generiert:</p>
<pre><code class="language-cpp">A* Create_A()
{
	A* pA = new A;
	if ( pA != NULL )
		pA-&gt;add_a(&quot;a&quot;);
	return pA;
}
</code></pre>
<p>Wie ist das mit der Freigabe des Speichers für den Vector, wird beim delete in Zeile 10 der vom Vector belegte Speicher automatisch freigegeben?<br />
Der Aufruf von delete ist ja kein Verlassen eines Blocks (Scopes) <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="😕"
    /></p>
<pre><code class="language-cpp">int main() 
{ 
	A* ppA[10];
	for ( int i=0; i&lt;10; i++ )
	{
		ppA[i] = Create_A();
	}

	for ( int i=0; i&lt;10; i++ )
		delete ppA[i];
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1741742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1741742</guid><dc:creator><![CDATA[Erzeugerpraktikant]]></dc:creator><pubDate>Sun, 12 Jul 2009 21:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse. on Sun, 12 Jul 2009 21:33:43 GMT]]></title><description><![CDATA[<p>Was du mit <code>new</code> anforderst, musst du auch selber wieder mit <code>delete</code> freigeben. Membervariablen wie bei dir der <code>std::vector</code> werden im Destruktor der Klasse zerstört, bei dir geschieht das durch die <code>delete</code> -Anweisung. In deinem Fall gibst du richtig frei, allerdings würde ich eher eine entsprechende Freigabefunktion erstellen, damit du Allokation und Deallokation am selben Ort hast.</p>
<pre><code class="language-cpp">if ( pA != NULL )
</code></pre>
<p>Die Abfrage bringt rein gar nichts, da <code>new</code> im Fehlerfall eine <code>std::bad_alloc</code> -Exception wirft und nicht den Nullzeiger zurückgibt. Das wäre das Placement New mit <code>std::nothrow</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1741762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1741762</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 12 Jul 2009 21:33:43 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse. on Sun, 12 Jul 2009 21:51:45 GMT]]></title><description><![CDATA[<p>Ok, der Vector gibt sich beim delete Aufruf quasi selbst frei.<br />
Bei der Sache mit dem NULL Zeiger (std::bad_alloc, std::nothrow) macht man das mit try-catch oder was meinst du damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1741777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1741777</guid><dc:creator><![CDATA[Erzeugerpraktikant]]></dc:creator><pubDate>Sun, 12 Jul 2009 21:51:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse. on Sun, 12 Jul 2009 21:56:22 GMT]]></title><description><![CDATA[<p>Ja, wenn du die normale <code>new</code> -Version nutzt, schon.</p>
<p>Allerdings solltest du dir um solche Dinge momentan keine Gedanken machen, <code>std::bad_alloc</code> wird sehr sehr selten geworfen. Konzentrier dich lieber darauf, andere Dinge richtig zu lernen. <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/1741782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1741782</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 12 Jul 2009 21:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse. on Sun, 12 Jul 2009 22:10:19 GMT]]></title><description><![CDATA[<p>Ok, ich lasse das</p>
<pre><code class="language-cpp">if ( pA != NULL )
</code></pre>
<p>einfach weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1741795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1741795</guid><dc:creator><![CDATA[Erzeugerpraktikant]]></dc:creator><pubDate>Sun, 12 Jul 2009 22:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe eines Vectors in dynamisch erzeugter Klasse. on Sun, 12 Jul 2009 22:46:33 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Allerdings solltest du dir um solche Dinge momentan keine Gedanken machen, <code>std::bad_alloc</code> wird sehr sehr selten geworfen.</p>
</blockquote>
<p>Um eventuelle Befürchtungen zu verhindern: Das passiert in der Regel nur bei folgenden 2 Situationen:</p>
<ul>
<li>Arbeitsspeicher ist voll</li>
<li>Zu viel Speicher wurde auf einmal angefordert (ist oft das gleiche wie der 1. Punkt)</li>
</ul>
<p>Da der RAM auf heutigen PCs selten voll wird, muss man sich also keine Gedanken über std::bad_alloc machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1741814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1741814</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sun, 12 Jul 2009 22:46:33 GMT</pubDate></item></channel></rss>