<?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 Operator in einer Methode]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich komme aus der Java Welt und habe zwei ganz einfache Fragen:</p>
<p>Ich habe folgende Funktion:</p>
<pre><code>void foo() {
 A *a = new A();
}
</code></pre>
<p>Liege ich mit folgender Aussage richtig?<br />
Ein Objekt von A wird auf dem Heap angelegt. Die Variable a liegt auf dem Stack. nach Beendigung von foo() wird a vom Stack gepoppt, das Objekt A liegt jedoch noch am Heap, ist jedoch nicht mehr ereichbar. Muss ich also bevor die Methode verlassen wird zwingend ein delete ausführen, damit der Speicher von A wieder freigegeben wird?</p>
<p>zweite Frage:</p>
<p>sind folgende zwei Anweisungen semantisch equivalent?</p>
<pre><code>A a = A();
A a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/290922/new-operator-in-einer-methode</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 20:33:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290922.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Aug 2011 16:41:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 16:41:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich komme aus der Java Welt und habe zwei ganz einfache Fragen:</p>
<p>Ich habe folgende Funktion:</p>
<pre><code>void foo() {
 A *a = new A();
}
</code></pre>
<p>Liege ich mit folgender Aussage richtig?<br />
Ein Objekt von A wird auf dem Heap angelegt. Die Variable a liegt auf dem Stack. nach Beendigung von foo() wird a vom Stack gepoppt, das Objekt A liegt jedoch noch am Heap, ist jedoch nicht mehr ereichbar. Muss ich also bevor die Methode verlassen wird zwingend ein delete ausführen, damit der Speicher von A wieder freigegeben wird?</p>
<p>zweite Frage:</p>
<p>sind folgende zwei Anweisungen semantisch equivalent?</p>
<pre><code>A a = A();
A a;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2102703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102703</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Sat, 06 Aug 2011 16:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 17:50:12 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u109509" rel="nofollow">SeppJ</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f10" rel="nofollow">C (C89 und C99)</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102724</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sat, 06 Aug 2011 17:50:12 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 17:54:58 GMT]]></title><description><![CDATA[<ol>
<li>Ja.</li>
<li>Nein.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2102725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102725</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 06 Aug 2011 17:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 17:58:55 GMT]]></title><description><![CDATA[<p>nightrider schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich komme aus der Java Welt und habe zwei ganz einfache Fragen:</p>
<p>Ich habe folgende Funktion:</p>
<pre><code>void foo() {
 A *a = new A();
}
</code></pre>
<p>Liege ich mit folgender Aussage richtig?<br />
Ein Objekt von A wird auf dem Heap angelegt. Die Variable a liegt auf dem Stack. nach Beendigung von foo() wird a vom Stack gepoppt, das Objekt A liegt jedoch noch am Heap, ist jedoch nicht mehr ereichbar.</p>
</blockquote>
<p>Ja.</p>
<blockquote>
<p>Muss ich also bevor die Methode verlassen wird zwingend ein delete ausführen, damit der Speicher von A wieder freigegeben wird?</p>
</blockquote>
<p>Ja und Nein.<br />
Ja: Du musst wieder aufräumen.<br />
Nein: Wozu überhaupt erst Dreck machen? In C++ muss, im Gegensatz zu Java, nicht alles auf den Heap. Genaugenommen ist das sogar eher die Ausnahme. Und falls doch, dann Kapsel das in Stackobjekten die ein Heapobjekt halten und dieses selbstständig löschen, wenn sie den Scope verlassen. Stichwort für Google: RAII. Das machen alle Standardklassen so. Und falls du doch mal Pointersemantik wegen exotischer Objektlebenszeiten brauchst, dann nimm Pointerklassen die das Heapobjekt löschen, wenn alle Referenzen den Scope verlassen haben. Stichwort: Smartpointer.</p>
<blockquote>
<p>sind folgende zwei Anweisungen semantisch equivalent?</p>
<pre><code>A a = A();
A a;
</code></pre>
</blockquote>
<p>Ja, in beiden Fällen wird nur der Defaultkonstruktor benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102727</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 06 Aug 2011 17:58:55 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:00:11 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<ol>
<li>Ja.</li>
<li>Nein.</li>
</ol>
</blockquote>
<p>2: So? Probier mal aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct foo
{
  foo(const foo&amp; f) {std::cout &lt;&lt; &quot;Kopiert.\n&quot;;}
  foo() {std::cout &lt;&lt; &quot;Default.\n&quot;;}
  foo&amp; operator=(const foo&amp; f){std::cout &lt;&lt; &quot;Zugewiesen.\n&quot;;}
};

int main()
{
  foo a;
  foo b = foo();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2102728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102728</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:00:12 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja, in beiden Fällen wird nur der Defaultkonstruktor benutzt.</p>
</blockquote>
<p>Bist du dir da sicher? Ich dachte es wird der Defaultkonstruktor und dann der Kopierkonstruktor ausgeführt. Wäre ja auch intuitiv.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102729</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:00:12 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:02:01 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja, in beiden Fällen wird nur der Defaultkonstruktor benutzt.</p>
</blockquote>
<p>Bist du dir da sicher? Ich dachte es wird der Defaultkonstruktor und dann der Kopierkonstruktor ausgeführt. Wäre ja auch intuitiv.</p>
</blockquote>
<p>Siehe obiges edit. Ich könnte auch die Stelle im Standard suchen, aber gerade keine Zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102730</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:06:33 GMT]]></title><description><![CDATA[<p>Ja, du hast recht. Aber das ist unintuitiv und inkonsistent.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102732</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:06:33 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:14:04 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Ja, in beiden Fällen wird nur der Defaultkonstruktor benutzt.</p>
</blockquote>
<p>Bist du dir da sicher? Ich dachte es wird der Defaultkonstruktor und dann der Kopierkonstruktor ausgeführt. Wäre ja auch intuitiv.</p>
</blockquote>
<p>Ist auch so. Allerdings erzeugt der Defaultkonstruktor ein temporäres Objekt, also ist copy elision a.k.a. RVO möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102734</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:14:04 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:15:33 GMT]]></title><description><![CDATA[<p>ich denke auch, dass es default konstruiert wird und dann zugewiesen, allerdings wird jeder compiler schon beim ersten optimieren, nur den default konstruktor aufrufen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102735</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:15:33 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:17:23 GMT]]></title><description><![CDATA[<p>Ich hab's im MSVC 2008 <strong>ohne</strong> Optimierungen getestet. Immer noch zwei DefCToren...</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>ich denke auch, dass es default konstruiert wird und dann zugewiesen</p>
</blockquote>
<p>Zugewiesen sicher nicht. Du meinst Kopierkonstruiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102736</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:17:23 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:21:32 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Ich hab's im MSVC 2008 <strong>ohne</strong> Optimierungen getestet. Immer noch zwei DefCToren...</p>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>ich denke auch, dass es default konstruiert wird und dann zugewiesen</p>
</blockquote>
<p>Zugewiesen sicher nicht. Du meinst Kopierkonstruiert.</p>
</blockquote>
<p>Compileroptimierung != Sprachoptimierung. Wäre auch doof wenn der Compiler plötzlich was anderes machen dürfe, bloß weil die Optimierung eingschaltet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102739</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:21:32 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 18:31:39 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>EOutOfResources schrieb:</p>
<blockquote>
<ol>
<li>Ja.</li>
<li>Nein.</li>
</ol>
</blockquote>
<p>2: So? Probier mal aus:</p>
</blockquote>
<p>So? Probier mal aus:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct foo
{

  foo() {std::cout &lt;&lt; &quot;Default.\n&quot;;}
  foo&amp; operator=(const foo&amp; f){std::cout &lt;&lt; &quot;Zugewiesen.\n&quot;;}
private:
  foo(const foo&amp; f) {std::cout &lt;&lt; &quot;Kopiert.\n&quot;;}
};

int main()
{
  foo a;
  foo b = foo(); //Ups!!!
}
</code></pre>
<p><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/2102742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102742</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Sat, 06 Aug 2011 18:31:39 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 22:39:20 GMT]]></title><description><![CDATA[<p>Argh. Gut erkannt, dass es da doch noch einen kleinen Unterschied gibt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102794</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 06 Aug 2011 22:39:20 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 23:24:36 GMT]]></title><description><![CDATA[<p>Da bin ich jetzt nicht hinterhergekommen, sehe keinen signifikanten Unterschied bloss dass 'hmpf's Stück in IDEOne nicht kompiliert <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2102802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102802</guid><dc:creator><![CDATA[hä?]]></dc:creator><pubDate>Sat, 06 Aug 2011 23:24:36 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 06 Aug 2011 23:34:25 GMT]]></title><description><![CDATA[<p>hä? schrieb:</p>
<blockquote>
<p>Da bin ich jetzt nicht hinterhergekommen, sehe keinen signifikanten Unterschied bloss dass 'hmpf's Stück in IDEOne nicht kompiliert <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>Zeile 8 <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2102804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102804</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 06 Aug 2011 23:34:25 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sun, 07 Aug 2011 10:11:01 GMT]]></title><description><![CDATA[<p>Also ich blicke hier nicht mehr ganz durch. Dass der Code von hmpf nicht kompiliert kann ich nachvollziehen. Jedoch kann ich die Ausgabe des Codes von SeppJ nicht ganz nachempfinden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2102873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2102873</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 07 Aug 2011 10:11:01 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sun, 07 Aug 2011 15:31:44 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Also ich blicke hier nicht mehr ganz durch. Dass der Code von hmpf nicht kompiliert kann ich nachvollziehen. Jedoch kann ich die Ausgabe des Codes von SeppJ nicht ganz nachempfinden.</p>
</blockquote>
<p>Also wir sind uns hoffentlich einig, dass der Zuweisungsoperator nie zur Wahl stand, genommen zu werden. Denn bei der Erzeugung wird bei dem Gleichheitszeichen das Objekt recht konstruiert und dann eine Kopie gemacht. Der Kopierkonstruktor darf (oder genauer gesagt: muss) hier aber vollständig wegoptimiert werden, selbst wenn er Nebeneffekte hat, da hier ein temporäres Objekt in ein neues kopiert wird. Das ist die berühmte Copy-Elision.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2103017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2103017</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 07 Aug 2011 15:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sun, 07 Aug 2011 22:01:14 GMT]]></title><description><![CDATA[<blockquote>
<p>Wozu überhaupt erst Dreck machen? In C++ muss, im Gegensatz zu Java, nicht alles auf den Heap. Genaugenommen ist das sogar eher die Ausnahme.</p>
</blockquote>
<p>Also wenn möglich sollte ich alles was geht auf den Stack legen oder? Den Stack zu pushen und zu poppen wird schließlich schneller sein, als Speicher am Heap zu de/allokieren oder?</p>
<p>Mit den Sprachelementen von C++ kenne ich mich recht gut aus. Ich weiß aber nicht, wie ich manche Sprachelemente einsetzen soll/muss. Z.B. finde ich das Schlüsselwort typedef recht überflüssig. Warum einem Typen nochmal einen neuen Namen geben? Oder beim Schlüsselwort union kann ich mir nicht vorstellen, dass das in der Praxis gebraucht wird. Oder warum gibt es structs wenn es Klassen gibt?</p>
<p>Ich glaube ich müsste mir deswegen C++ in der Praxis genauer ansehen, damit ich es besser verstehe. Gibt es irgendwo ein paar kleinere Projekte, die aber sauber geschrieben sind?</p>
<p>Oder die noch bessere Frage: Wie habt ihr so gut C++ gelernt?? <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/2103173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2103173</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Sun, 07 Aug 2011 22:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sun, 07 Aug 2011 22:11:20 GMT]]></title><description><![CDATA[<p>nightrider schrieb:</p>
<blockquote>
<p>Also wenn möglich sollte ich alles was geht auf den Stack legen oder? Den Stack zu pushen und zu poppen wird schließlich schneller sein, als Speicher am Heap zu de/allokieren oder?</p>
</blockquote>
<p>Technisch: Ja, es ist <strong>deutlich</strong> schneller. Und semantisch auch klares ja. Das Pushen und Poppen geht automatisch. Bei Heapallokationen musst du selber aufpassen. Der Stack ist so ein bisschen wie eine GC in C++ <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>
<blockquote>
<p>Warum einem Typen nochmal einen neuen Namen geben?</p>
</blockquote>
<p>1. Schreibfaulheit. Bei komplizierten Templates werden Typennamen schnell mal mehrere Zeilen lang.<br />
2. Wartbarkeit. Es kommt recht oft vor, dass man mal schnell einen Conatinertypen überall ändern möchte. Da alle Container mehr oder weniger gleich angesprochen werden, muss man am Code nichts ändern außer dem Namen. Und da ist es ungemein praktisch, nur eine Stelle zu haben, wo dieser auftaucht.</p>
<blockquote>
<p>Oder beim Schlüsselwort union kann ich mir nicht vorstellen, dass das in der Praxis gebraucht wird.</p>
</blockquote>
<p>Richtig. Ist wegen der Kompatibilität mit C dabei, wird aber recht selten benutzt.</p>
<blockquote>
<p>Oder warum gibt es structs wenn es Klassen gibt?</p>
</blockquote>
<p>Ebenfalls Kompatibilität mit C. Wird aber durchaus oft benutzt, um den semantischen Unterschied zwischen einer Zusammenfassung von Variablen und einer &quot;richtigen&quot; mit Memberfunktionen die richtig Arbeit verrichten auszudrücken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2103176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2103176</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 07 Aug 2011 22:11:20 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sun, 07 Aug 2011 22:12:57 GMT]]></title><description><![CDATA[<p>nightrider schrieb:</p>
<blockquote>
<blockquote>
<p>Wozu überhaupt erst Dreck machen? In C++ muss, im Gegensatz zu Java, nicht alles auf den Heap. Genaugenommen ist das sogar eher die Ausnahme.</p>
</blockquote>
<p>Also wenn möglich sollte ich alles was geht auf den Stack legen oder? Den Stack zu pushen und zu poppen wird schließlich schneller sein, als Speicher am Heap zu de/allokieren oder?</p>
</blockquote>
<p>Der Hauptvorteil des Stack ist weniger die Geschwindigkeit, sondern die Sicherheit. Stack-Objekte werden automatisch vernichtet, wenn sie nicht mehr gebraucht werden (egal auf welchem Weg ihr Scope verlassen wurde), Heap-Objekte werden erst zerstört, wenn du explizit delete aufrufst (und wenn du keinen Verweis mehr darauf hast, geht das nicht mehr).</p>
<blockquote>
<p>Mit den Sprachelementen von C++ kenne ich mich recht gut aus. Ich weiß aber nicht, wie ich manche Sprachelemente einsetzen soll/muss. Z.B. finde ich das Schlüsselwort typedef recht überflüssig. Warum einem Typen nochmal einen neuen Namen geben? Oder beim Schlüsselwort union kann ich mir nicht vorstellen, dass das in der Praxis gebraucht wird. Oder warum gibt es structs wenn es Klassen gibt?</p>
</blockquote>
<p>Erstens hat C++ alle drei Schlüsselwörter aus C geerbt. Zweitens:<br />
* typedef: Die Namen von Datentypen können durchaus etwas umfangreicher werden, da ist es gut, eine Abkürzung dafür definieren zu dürfen. Außerdem ist es praktischer für die Austauschbarkeit, daß z.B. jede Containerklasse die wichtigsten Typen als typedef mitliefert.<br />
* struct: Ist syntaktisch fast äquivalent zu class, aber wird normalerweise verwendet, um einen Unterschied zwischen &quot;echten&quot; Klassen (Datenmember sind privat, Kontakt nach außen erfolgt über öffentliche Methoden) und Wertesammlungen (öffentlich zugängliche Datenmember, eventuell ergänzt um ein paar Hilfsmethoden) zu kennzeichnen<br />
* union: Ist im C++ Umfeld tatsächlich selten (vor allem, weil es sich nicht mit non-POD-Typen verträgt).</p>
<blockquote>
<p>Oder die noch bessere Frage: Wie habt ihr so gut C++ gelernt?? <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>
</blockquote>
<p>VIEL Übung und gutes Lehrmaterial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2103178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2103178</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 07 Aug 2011 22:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Mon, 08 Aug 2011 14:49:50 GMT]]></title><description><![CDATA[<p>Danke für die super Erklärungen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2103478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2103478</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Mon, 08 Aug 2011 14:49:50 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 13 Aug 2011 11:23:28 GMT]]></title><description><![CDATA[<p>Jetzt habe ich noch eine kurze Frage. Ich wollte keinen neuen Thread deswegen aufmachen:</p>
<pre><code>class A {
public:
  A(int x) {
  }
};

class B {
public:
  A a(34);
};
</code></pre>
<p>Warum kann ich so kein Objekt von A in B erzeugen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105656</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Sat, 13 Aug 2011 11:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 13 Aug 2011 11:25:20 GMT]]></title><description><![CDATA[<p>Das kannst du schon, geht aber so:</p>
<pre><code class="language-cpp">struct A
{ 
  A(int); 
}; 

struct B
{ 
  A Var; 
  B();
};
B::B() : Var(123)
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2105658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105658</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 13 Aug 2011 11:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to new Operator in einer Methode on Sat, 13 Aug 2011 13:47:10 GMT]]></title><description><![CDATA[<p>Coole Sache, ich wäre mir sicher gewesen, dass das nur mit new funktionieren würde. Das hat mir echt den Tag gerettet <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="🙂"
    /><br />
Danke sehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2105692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2105692</guid><dc:creator><![CDATA[nightrider]]></dc:creator><pubDate>Sat, 13 Aug 2011 13:47:10 GMT</pubDate></item></channel></rss>