<?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[Memory Allocation und Deletion]]></title><description><![CDATA[<p>Hey</p>
<p>Ich bin gerade etwas verwirrt wie der folgende Programm semantisch abläuft. Unten seht ihr zwei kleine Programmeausschnitte. Stimmt der Ablauf so wie ich ihn in den Kommentaren geschrieben habe?</p>
<p>Programmteil 1:</p>
<pre><code class="language-cpp">class Foo
{
public:
	int a;

	Foo ( int a_i ) : a( a_i ) {}
};

std::vector&lt;Foo&gt; vec;

void foo1()
{
	Foo f1(0); // f1 kommt auf den Stack
	Foo f2(1); // f2 kommt auf den Stack

	vec.push_back( f1 ); // f1 wird kopiert
	vec.push_back( f2 ); // f2 wird kopiert
} // f1, f2 werden vom Stack gelöscht
</code></pre>
<p>Programmteil 2:</p>
<pre><code class="language-cpp">class Foo
{
public:
	int a;

	Foo ( int a_i ) : a( a_i ) {}
};

std::vector&lt;Foo*&gt; vec;

void foo2()
{
	Foo* f1 = new Foo(0); // f1 kommt auf den Stack
	Foo* f2 = new Foo(1); // f2 kommt auf den Stack

	vec.push_back( f1 ); // Adresse auf f1 wird übergeben
	vec.push_back( f2 ); // Adresse auf f2 wird übergeben
} // Kein memory leak (?)
</code></pre>
<p>Ich müsste das eigentlich wissen aber ich bin gerade ziemlich verunsichert.</p>
<p>PS:<br />
Die Beispiele sind natürlich nicht sinnvoll. Ich will nur wissen, ob ich mir den Ablauf korrekt vorstelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/282636/memory-allocation-und-deletion</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 01:41:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282636.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Feb 2011 15:11:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memory Allocation und Deletion on Wed, 23 Feb 2011 15:11:25 GMT]]></title><description><![CDATA[<p>Hey</p>
<p>Ich bin gerade etwas verwirrt wie der folgende Programm semantisch abläuft. Unten seht ihr zwei kleine Programmeausschnitte. Stimmt der Ablauf so wie ich ihn in den Kommentaren geschrieben habe?</p>
<p>Programmteil 1:</p>
<pre><code class="language-cpp">class Foo
{
public:
	int a;

	Foo ( int a_i ) : a( a_i ) {}
};

std::vector&lt;Foo&gt; vec;

void foo1()
{
	Foo f1(0); // f1 kommt auf den Stack
	Foo f2(1); // f2 kommt auf den Stack

	vec.push_back( f1 ); // f1 wird kopiert
	vec.push_back( f2 ); // f2 wird kopiert
} // f1, f2 werden vom Stack gelöscht
</code></pre>
<p>Programmteil 2:</p>
<pre><code class="language-cpp">class Foo
{
public:
	int a;

	Foo ( int a_i ) : a( a_i ) {}
};

std::vector&lt;Foo*&gt; vec;

void foo2()
{
	Foo* f1 = new Foo(0); // f1 kommt auf den Stack
	Foo* f2 = new Foo(1); // f2 kommt auf den Stack

	vec.push_back( f1 ); // Adresse auf f1 wird übergeben
	vec.push_back( f2 ); // Adresse auf f2 wird übergeben
} // Kein memory leak (?)
</code></pre>
<p>Ich müsste das eigentlich wissen aber ich bin gerade ziemlich verunsichert.</p>
<p>PS:<br />
Die Beispiele sind natürlich nicht sinnvoll. Ich will nur wissen, ob ich mir den Ablauf korrekt vorstelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025376</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Wed, 23 Feb 2011 15:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Allocation und Deletion on Wed, 23 Feb 2011 15:21:09 GMT]]></title><description><![CDATA[<p>Nein stimmt nicht. Im Programmteil 2 werden die Objekte auf dem Heap erzeugt. Nur die Zeiger liegen auf dem Stack. Da du die Zeiger auf die Objekte in den vector kopierts, gibt es am Ende von foo2 erstmal kein Memory-Leak. Du musst aber die Objekte löschen, bevor du die Zeiger auf sie verlierst. In deinem konkreten Beispiel wäre das nie notwendig, weil dein vector im globalen Bereich liegt. Dort wird der Speicher automatisch beim Verlassen der Anwendung frei gegeben. Es schadet aber nicht für jedes new auch ein delete zu haben, so wie du es gelernt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025387</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Wed, 23 Feb 2011 15:21:09 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Allocation und Deletion on Wed, 23 Feb 2011 15:42:25 GMT]]></title><description><![CDATA[<p>Mir ist klar, dass die Objekte in foo2() auf den Heap kommen. Habe Copy Paste gemacht und dann vergessen Stack durch Heap zu ersetzen ^^</p>
<p>Ja, normalerweise brauche ich sowiso kein &quot;offenes&quot; delete. Da nehm ich dann Smart Pointer.</p>
<p>Danke für die Antwort <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025403</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Wed, 23 Feb 2011 15:42:25 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Allocation und Deletion on Wed, 23 Feb 2011 18:31:02 GMT]]></title><description><![CDATA[<p>Nick Unbekannt schrieb:</p>
<blockquote>
<p>Du musst aber die Objekte löschen, bevor du die Zeiger auf sie verlierst. In deinem konkreten Beispiel wäre das nie notwendig, weil dein vector im globalen Bereich liegt. Dort wird der Speicher automatisch beim Verlassen der Anwendung frei gegeben. Es schadet aber nicht für jedes new auch ein delete zu haben, so wie du es gelernt hast.</p>
</blockquote>
<p>das kommt aufs betriebsystem an...</p>
<p>windows und linux machen das in der aktuellsten version, aber vor 10~15 jahren wars vielleicht nicht so<br />
und andere betriebssysteme machen das vielleicht auch nicht...</p>
<p>EDIT: <strong>zu jedem new/new[] gehört ein delete/delete[]</strong></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2025502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2025502</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 23 Feb 2011 18:31:02 GMT</pubDate></item></channel></rss>