<?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 &amp;amp; delete Sinn &amp;amp; Zweck]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>Habe mich gerade mal ein bisschen mit dynamischer Speicher und Heap-Adressierung auseinander gesetzt und bin dort auf die Schlüsselwörter new und delete gestossen.</p>
<p>Im Internet habe ich erfahren, dass der new-Ausdruck einen Zeiger auf einen Speicherbereich zurückgibt.<br />
Es müssen zudem auch noch Typ und Größe des Objektes angegeben werden.<br />
Der Vorteil von new &amp; delete sollte sein, wie ichs gelesen habe, dass Objekte direkt initialisiert werden, wenn man sie erstellt.<br />
Also wird beispielsweise hier:</p>
<p>string * ps = new string();</p>
<p>ps, direkt &quot;&quot; gesetzt.</p>
<p>Zudem wurde noch gesagt, dass Zeiger , welche mit new erstellt werden auch {} überleben.<br />
Doch auch das ist doch nicht wahr, oder nicht?<br />
Doch das kann doch nicht der einzige Vorteil sein?<br />
Was genau bringt uns die new-Anweisung?<br />
Warum nicht einfach mit normalen Zeigern und normalen Objekten arbeiten?</p>
<p>Wäre nett, wenn hier jemand ein Beispiel, wos was bringt schreiben könnte.<br />
In meinem Buch gibts zwar ein Beispiel, aber das ist meines erachtens irgendwie eher sinnlos und liesse sich anders viel einfacher realisieren.</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198607/new-amp-delete-sinn-amp-zweck</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 16:01:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198607.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Nov 2007 10:50:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 10:53:21 GMT]]></title><description><![CDATA[<p>Hey ihr,</p>
<p>Habe mich gerade mal ein bisschen mit dynamischer Speicher und Heap-Adressierung auseinander gesetzt und bin dort auf die Schlüsselwörter new und delete gestossen.</p>
<p>Im Internet habe ich erfahren, dass der new-Ausdruck einen Zeiger auf einen Speicherbereich zurückgibt.<br />
Es müssen zudem auch noch Typ und Größe des Objektes angegeben werden.<br />
Der Vorteil von new &amp; delete sollte sein, wie ichs gelesen habe, dass Objekte direkt initialisiert werden, wenn man sie erstellt.<br />
Also wird beispielsweise hier:</p>
<p>string * ps = new string();</p>
<p>ps, direkt &quot;&quot; gesetzt.</p>
<p>Zudem wurde noch gesagt, dass Zeiger , welche mit new erstellt werden auch {} überleben.<br />
Doch auch das ist doch nicht wahr, oder nicht?<br />
Doch das kann doch nicht der einzige Vorteil sein?<br />
Was genau bringt uns die new-Anweisung?<br />
Warum nicht einfach mit normalen Zeigern und normalen Objekten arbeiten?</p>
<p>Wäre nett, wenn hier jemand ein Beispiel, wos was bringt schreiben könnte.<br />
In meinem Buch gibts zwar ein Beispiel, aber das ist meines erachtens irgendwie eher sinnlos und liesse sich anders viel einfacher realisieren.</p>
<p>cya<br />
David</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408714</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Fri, 23 Nov 2007 10:53:21 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 10:55:07 GMT]]></title><description><![CDATA[<p>Weil durch new Speicher am HEAP reserviert wird, und ned am STACK wie ohne new.<br />
Google mal nach HEAP und STACK, jedenfalls hat ein Programm meist nur sehr begrenzt STACK zur Verfügung.</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408716</guid><dc:creator><![CDATA[ceplusplus@loggedoff]]></dc:creator><pubDate>Fri, 23 Nov 2007 10:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 11:01:55 GMT]]></title><description><![CDATA[<p>777 schrieb:</p>
<blockquote>
<p>Zudem wurde noch gesagt, dass Zeiger , welche mit new erstellt werden auch {} überleben.<br />
Doch auch das ist doch nicht wahr, oder nicht?<br />
Doch das kann doch nicht der einzige Vorteil sein?</p>
</blockquote>
<p>Nein, die Zeiger überleben das nicht, dafür aber der Speicherbereich dahinter.#</p>
<p>Kleines Beispiel wo new/delete auch sinnvoll ist:</p>
<pre><code class="language-cpp">class Car
{
    public:
        virtual void Hupe()
        {
            cout &lt;&lt; &quot;Tröööööt&quot; &lt;&lt; endl;
        }
};

class Ford : public Car
{
    public:
        virtual void Hupe()
        {
            cout &lt;&lt; &quot;Huuuuuuuuup&quot; &lt;&lt; endl;
        }
};

class Audi : public Car
{
    public:
        virtual void Hupe()
        {
            cout &lt;&lt; &quot;Kabumm&quot; &lt;&lt; endl;
        }
};

int main()
{
    Car* car = 0;

    string brand;
    cin &gt;&gt; brand;
    if ( brand == &quot;Ford&quot; )
        car = new Ford();
    else if ( brand == &quot;Audi&quot; )
        car = new Audi();
    else
        car = new Car();

    car-&gt;Hupe();
    delete car;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1408720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408720</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 23 Nov 2007 11:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 11:17:44 GMT]]></title><description><![CDATA[<p>new ruft bei Klassen ebenfalls den Standardkonstruktor auf und dieser ist letztendlich für die Initialisierung des Objekts zuständig. Du kannst also auch</p>
<pre><code class="language-cpp">std::string ps;
</code></pre>
<p>machen, dieser wird auch mit einem Leerstring initialisiert sein, weil das der Konstruktor übernimmt in diesem Fall.</p>
<p>Durch dynamische Speicherreservierung kannst du die Lebensdauer eines Objekts selbst bestimmen. Objekte auf dem Stack, werden automatisch entfernt sobald der aktuelle Scope verlassen wird. Objekte auf dem Heap werden erst durch delete entfernt. Du musst dabei natürlich beachten das du immer einen Zeiger auf die Stelle im Heap hast. Du bist für das Aufräumen verantwortlich. Wenn du in einer Funktion Speicher mit new anforderst, solltest du ihn entweder darin wieder freigeben oder dafür sorgen das dieser an anderer Stelle freigegeben werden kann (z.B. indem zu die Adresse auf die der Zeiger zeigt am Ende der Funktion zurückgibst; davon ist allerdings abzuraten!). Zeiger werden nämlich entfernt wenn ein Scope verlassen wird, aber das Objekt auf dem Heap nicht und wenn du das nicht mit delete entfernst, hast du ein Speicherleck.</p>
<p>Außerdem werden für Polymorphie (meist) Zeiger und dynamische Speicherreservierung eingesetzt, wie von Badestrand gezeigt. Ebenfalls werden damit dynamische Datenstrukturen aufgebaut, wie verkettete Listen. In C++ hat man dafür zwar entsprechende Container, aber ab und zu muss man sowas auch mal selbst programmieren (und wenn es nur zu Lernzwecken ist).</p>
<p>Eventuell hilft dir auch das hier noch:<br />
<a href="http://tutorial.schornboeck.net/stack_heap.htm" rel="nofollow">http://tutorial.schornboeck.net/stack_heap.htm</a></p>
<p>Greetz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408728</guid><dc:creator><![CDATA[Vellas]]></dc:creator><pubDate>Fri, 23 Nov 2007 11:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 11:19:30 GMT]]></title><description><![CDATA[<blockquote>
<p>Weil durch new Speicher am HEAP reserviert wird, und ned am STACK wie ohne new.<br />
Google mal nach HEAP und STACK, jedenfalls hat ein Programm meist nur sehr begrenzt STACK zur Verfügung.</p>
</blockquote>
<p>Das klingt zwar logisch aber ich habe es noch nie erlebt, dass für ein Programm nicht genug Speicher zur Verfügung stand.<br />
Obwohl mir gerade einleuchtet, warum so viele große Compiler, wie Borland alle Objekte, wie Buttons, Grafiken oder sounds immer mit dem new Operator erstellen.<br />
Ich hatte diese Frage hier im Forum auch schonmal gepostet aber diese Erklärung erscheint mir wensentlich sinnvoller als alle anderen genannten Gründe.</p>
<p>Badestrands Beispiel seh ich mir jetzt mal genauer an...-.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408731</guid><dc:creator><![CDATA[777]]></dc:creator><pubDate>Fri, 23 Nov 2007 11:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 12:15:43 GMT]]></title><description><![CDATA[<p>Der Grund, warum bei Borland-Compilern alle VCL-Objekte mit new erstellt werden, ist darin begründet, dass man hier die Polymorphie intensiv nutzt. Das geht zwar theoretisch auch mit Referenzen, aber eben nicht bei der VCL, da die in Pascal programmiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408777</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 23 Nov 2007 12:15:43 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 12:43:38 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich hatte diese Frage hier im Forum auch schonmal gepostet aber diese Erklärung erscheint mir wensentlich sinnvoller als alle anderen genannten Gründe.</p>
</blockquote>
<p>Ist sie aber nicht.<br />
Wenn du nicht verstehst wann und warum man mit new/delete arbeitet (arbeiten muss, und das ganz unabhängig davon ob einem der Speicher ausgehen könnte), dann kann ich dir wahrscheinlich auch nicht helfen.<br />
Das ist eine Sache die so logisch ist wie es nur geht.</p>
<p>Wenn du die Lebenszeit eines Objektes &quot;mit Hand&quot; kontrollieren können musst, brauchst du eben new/delete. Und Fälle wo das nötig ist gibt es einige.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408795</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Nov 2007 12:43:38 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 13:22:13 GMT]]></title><description><![CDATA[<p>Machen wir's doch mal ganz einfach. Schreib ohne 'new' und 'delete' ein Programm, das vom Benutzer eine Zahl <em>n</em> einliest (das geht schonmal nicht ohne Zeiger, aber tun wir mal so als ob das ginge), dann vom Benutzer eine <em>n</em>*<em>n</em> große Matrix einliest (wie auch immer) und zum Schluss die ersten zwei Spalten aufeinanderaddiert und ausgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1408822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1408822</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 23 Nov 2007 13:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 20:07:11 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...ein Programm, das vom Benutzer eine Zahl <em>n</em> einliest (das geht schonmal nicht ohne Zeiger, ...</p>
</blockquote>
<p>Wo braucht man denn da Zeiger ?</p>
<pre><code class="language-cpp">int i;
cin &gt;&gt; i;
</code></pre>
<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="😕"
    /></p>
<p>Das Andere stimmt zwar prinzipiell, aber da viele new/delete-Unerfahrene sowieso immer mit &quot;impliziten Maximallängen&quot; arbeiten, kann dieser Schuss schnell nach hinten losgehen. <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="😉"
    /><br />
Aber prinzipiell stimmt natürlich, dass man in C++ dynamisch lange Arrays nicht auf dem Stack sondern nur auf dem Heap anlegen kann.</p>
<p>Wenn ich richtig sehe, hatten wir das Thema schonmal unter dem Titel &quot;Wofür Heap ?&quot;... und da war das Ergebnis:<br />
Heap dann, wenn<br />
- Speicher auf dem Stack nicht reicht (z.B. große Datenmengen),<br />
- Arraylänge zur Compilezeit nicht bekannt (natürlich kann man StdLib-Container verwenden ... aber spätestens die brauchen dann auch new)<br />
- Objekte müssen über ihren Scope hinaus gültig sein.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409085</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 23 Nov 2007 20:07:11 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 20:13:40 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Heap dann, wenn<br />
- Speicher auf dem Stack nicht reicht (z.B. große Datenmengen),<br />
- Arraylänge zur Compilezeit nicht bekannt (natürlich kann man StdLib-Container verwenden ... aber spätestens die brauchen dann auch new)<br />
- Objekte müssen über ihren Scope hinaus gültig sein.</p>
</blockquote>
<p>- Erst zur Laufzeit bekannt ist, ob oder von welchem Typ ein Objekt erstellt werden soll<br />
<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/1409090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409090</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 23 Nov 2007 20:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Fri, 23 Nov 2007 20:25:55 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...ein Programm, das vom Benutzer eine Zahl <em>n</em> einliest (das geht schonmal nicht ohne Zeiger, ...</p>
</blockquote>
<p>Wo braucht man denn da Zeiger ?</p>
<pre><code class="language-cpp">int i;
cin &gt;&gt; i;
</code></pre>
<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="😕"
    /></p>
</blockquote>
<p>Konzeptuell braucht man da hinter den Kulissen Zeiger. „Rohe“ Zeiger benutze ich persönlich ja eh nie und dementsprechend auch kein 'new' bzw. 'delete'.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409094</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 23 Nov 2007 20:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sat, 24 Nov 2007 05:16:25 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...ein Programm, das vom Benutzer eine Zahl <em>n</em> einliest (das geht schonmal nicht ohne Zeiger, ...</p>
</blockquote>
<p>Wo braucht man denn da Zeiger ?</p>
<pre><code class="language-cpp">int i;
cin &gt;&gt; i;
</code></pre>
<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="😕"
    /></p>
</blockquote>
<p>Konzeptuell braucht man da hinter den Kulissen Zeiger.</p>
</blockquote>
<p>Also es ist zwar schon ne weile her, dass ich sowas mal mit Assembler gemacht hab, aber an nen Zeigen kann ich mich nicht erinnern.<br />
Vom Prinzi hat es etwas so ausgesehen (ohne fehlerbehandlung).</p>
<pre><code>zahl = 0
read:
interrupt für tastendruck //ergebnis steht z.B. in reg ax
if ax == ENTER jump ende
zahl += ax - '0'
zahl *= 10
jump read
ende:
</code></pre>
<p>Mit dem Streamgedöns braucht man wahrscheinlich schon nen Zeiger, aber um ne Zahl einzulesen eigentlch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409173</guid><dc:creator><![CDATA[asm anno dazumal]]></dc:creator><pubDate>Sat, 24 Nov 2007 05:16:25 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sat, 24 Nov 2007 12:39:17 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...Konzeptuell braucht man da hinter den Kulissen Zeiger. ...</p>
</blockquote>
<p>Also ichglaube weder, das das hier gefragt ist (es geht um new/delete und nicht um &quot;Zeiger hinter den Kulissen&quot;), noch dass diese Definition von &quot;Zeiger&quot; allzuviele C++-Programmierer teilen.<br />
Ich sehe da auschließlich Referenzen am Werk, die in C++ eigene (und zwar andere) Dinge sind als Zeiger.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409311</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 24 Nov 2007 12:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sat, 24 Nov 2007 12:52:26 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...Konzeptuell braucht man da hinter den Kulissen Zeiger. ...</p>
</blockquote>
<p>Also ichglaube weder, das das hier gefragt ist (es geht um new/delete und nicht um &quot;Zeiger hinter den Kulissen&quot;), noch dass diese Definition von &quot;Zeiger&quot; allzuviele C++-Programmierer teilen.</p>
</blockquote>
<p>Okay. Unter diesen Voraussetzungen *muss* die Antwort auf die originale Frage aber lauten „man braucht sie gar nicht.“ Alles andere ist eine falsche und gefährliche Antwort.</p>
<p>Abgesehen davon habe ich die Frage aber schon so verstanden, dass es darum ging, wozu man diese Konstrukte konzeptuell benötigt (und dass die Frage einfach schlecht / ungenau formuliert war).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409323</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 24 Nov 2007 12:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sat, 24 Nov 2007 22:08:17 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...<br />
Okay. Unter diesen Voraussetzungen *muss* die Antwort auf die originale Frage aber lauten „man braucht sie gar nicht.“ Alles andere ist eine falsche und gefährliche Antwort....</p>
</blockquote>
<p>Was ist denn daran:</p>
<blockquote>
<p>Heap dann, wenn<br />
- Speicher auf dem Stack nicht reicht (z.B. große Datenmengen),<br />
- Arraylänge zur Compilezeit nicht bekannt (natürlich kann man StdLib-Container verwenden ... aber spätestens die brauchen dann auch new)<br />
- Objekte müssen über ihren Scope hinaus gültig sein.<br />
- Erst zur Laufzeit bekannt ist, ob oder von welchem Typ ein Objekt erstellt werden soll</p>
</blockquote>
<p>falsch und gefährlich ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409585</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sun, 25 Nov 2007 07:42:54 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...<br />
Okay. Unter diesen Voraussetzungen *muss* die Antwort auf die originale Frage aber lauten „man braucht sie gar nicht.“ Alles andere ist eine falsche und gefährliche Antwort....</p>
</blockquote>
<p>Was ist denn daran:</p>
<blockquote>
<p>Heap dann, wenn<br />
- Speicher auf dem Stack nicht reicht (z.B. große Datenmengen),<br />
- Arraylänge zur Compilezeit nicht bekannt (natürlich kann man StdLib-Container verwenden ... <strong>aber spätestens die brauchen dann auch new</strong>)<br />
- Objekte müssen über ihren Scope hinaus gültig sein.<br />
- Erst zur Laufzeit bekannt ist, ob oder von welchem Typ ein Objekt erstellt werden soll</p>
</blockquote>
<p>falsch und gefährlich ?</p>
</blockquote>
<p>Das, was ich fett hervorgehoben habe.</p>
<p>Du hast mir weiter oben selbst vor die Füße geworfen, dass es hier *nicht* um gekapselte Speicherallokationen geht. Du hast recht, dass man Heap-Speicher am laufenden Band braucht. Aber mit der expliziten Benutzung von 'new' und 'delete' (insbesondere letzterem) hat das nichts zu tun.</p>
<p>In dieser Hinsicht habe ich mich, seitdem ich Meyers gelesen habe, wirklich zum Speicher-Nazi entwickelt. 'delete' ist gefährlich und unnötig und kommen in meinen Quellcodes gar nicht mehr vor, und 'new' nur noch in Verbindung mit Smart Pointers o.ä.</p>
<p>Ich möchte übrigens hervorheben, dass das nichts mit „Anfängerproblemen“ oder so zu tun hat. 'delete' macht es einfach so gut wie unmöglich, effizienten und Exception-sicheren Code zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409672</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 25 Nov 2007 07:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sun, 25 Nov 2007 08:29:29 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...<br />
Du hast mir weiter oben selbst vor die Füße geworfen, dass es hier *nicht* um gekapselte Speicherallokationen geht. ...</p>
</blockquote>
<p>Nö, habe ich nicht.<br />
Ich habe Dir &quot;vor die Füße geworfen&quot;, dass man &quot;Zeiger hinter den Kulissen&quot; (also da, wo der Compiler Referenzen als Zeiger implementiert) nicht braucht.<br />
... und das auch nur als Reaktion auf Deine Aussage: &quot;Zeiger braucht man beim Einlesen eines Wertes&quot;.<br />
Ich bestreite weder, dass man <em>Zeiger</em> braucht (da, wo &quot;kopierbare Verweise&quot; benötigt werden), noch dass man new/delete besser gekapselt nutzt - nur, dass das Einlesen eines Wertes Zeiger braucht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409678</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 25 Nov 2007 08:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sun, 25 Nov 2007 09:12:35 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...<br />
Du hast mir weiter oben selbst vor die Füße geworfen, dass es hier *nicht* um gekapselte Speicherallokationen geht. ...</p>
</blockquote>
<p>Nö, habe ich nicht.<br />
Ich habe Dir &quot;vor die Füße geworfen&quot;, dass man &quot;Zeiger hinter den Kulissen&quot; (also da, wo der Compiler Referenzen als Zeiger implementiert) nicht braucht.</p>
</blockquote>
<p>Ich spielte aber gar nicht auf die Referenzen an sondern darauf, dass die Auslese-Routine betriebssystemintern garantiert irgendwelche Zeiger verwenden wird. Lass es zur Not Zeiger auf die entsprechenden Funktionen aus dem Kernel sein (also unter Windows ntdll-Einsprungadressen).</p>
<p>Ist ja auch egal. Wie gesagt, wir gingen von unterschiedlichen Voraussetzungen aus. Ich hatte gedacht, dass nach dem konzeptuellen Sinn von Zeigern gefragt war, Du hattest das anscheinend konkreter auf 'new' und 'delete' bezogen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409685</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 25 Nov 2007 09:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to new &amp;amp; delete Sinn &amp;amp; Zweck on Sun, 25 Nov 2007 19:50:19 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...Ich spielte aber gar nicht auf die Referenzen an sondern darauf, dass die Auslese-Routine betriebssystemintern garantiert irgendwelche Zeiger verwenden wird. ...</p>
</blockquote>
<p>Ach so.</p>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>...Ich hatte gedacht, dass nach dem konzeptuellen Sinn von Zeigern gefragt war, Du hattest das anscheinend konkreter auf 'new' und 'delete' bezogen.</p>
</blockquote>
<p>Stimmt.<br />
Irgendwie wies mir so gar nicht sin die Richtung &quot;Zeiger&quot;:</p>
<p>777 schrieb:</p>
<blockquote>
<p>...<br />
Habe mich gerade mal ein bisschen mit dynamischer Speicher und Heap-Adressierung auseinander gesetzt und bin dort auf die Schlüsselwörter new und delete gestossen.</p>
<p>Im Internet habe ich erfahren, dass der new-Ausdruck einen Zeiger auf einen Speicherbereich zurückgibt.<br />
...<br />
Was genau bringt uns die new-Anweisung?<br />
Warum nicht einfach mit normalen Zeigern und normalen Objekten arbeiten?<br />
...</p>
</blockquote>
<p>... zumal der letzte Satz darafu hinweisen könnte, dass der OP den Sin von Zeigern durchaus kannte.</p>
<p>Naja, egal.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409995</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 25 Nov 2007 19:50:19 GMT</pubDate></item></channel></rss>