<?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 mit Klammern? Warum?]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>warum sollte es besser so heißen:</p>
<pre><code class="language-cpp">ClassX *x = new ClassX;
ClassX xx = new ClassX();
</code></pre>
<p>Als so:</p>
<pre><code class="language-cpp">ClassX *x = new ClassX();
ClassX xx = new ClassX;
</code></pre>
<p>Wenn man einen Pointer mit new befüllt sollen die Klammern weggelassen werden und wenn es eine die Variable direkt ist sollen die Klammern hin. Wieso?</p>
<p>Vielen Dank</p>
<p>Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262845/new-mit-klammern-warum</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 08:43:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262845.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Mar 2010 11:52:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 11:52:59 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>warum sollte es besser so heißen:</p>
<pre><code class="language-cpp">ClassX *x = new ClassX;
ClassX xx = new ClassX();
</code></pre>
<p>Als so:</p>
<pre><code class="language-cpp">ClassX *x = new ClassX();
ClassX xx = new ClassX;
</code></pre>
<p>Wenn man einen Pointer mit new befüllt sollen die Klammern weggelassen werden und wenn es eine die Variable direkt ist sollen die Klammern hin. Wieso?</p>
<p>Vielen Dank</p>
<p>Tim</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867910</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Fri, 12 Mar 2010 11:52:59 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 11:55:08 GMT]]></title><description><![CDATA[<p>Bist Du sicher, daß die Versionen alle compiliert werden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867915</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 12 Mar 2010 11:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 12:00:49 GMT]]></title><description><![CDATA[<p>... schrieb:</p>
<blockquote>
<p>warum sollte es besser so heißen:</p>
<pre><code class="language-cpp">ClassX *x = new ClassX;
ClassX xx = new ClassX();
</code></pre>
<p>Als so:</p>
<pre><code class="language-cpp">ClassX *x = new ClassX();
ClassX xx = new ClassX;
</code></pre>
<p>Wenn man einen Pointer mit new befüllt sollen die Klammern weggelassen werden und wenn es eine die Variable direkt ist sollen die Klammern hin. Wieso?</p>
</blockquote>
<p>Wo hast du das denn her? Bist du sicher dass du im richtigen Forum bist? Das ist zum Teil kein C++ sondern sieht eher nach Java oder ähnlichem aus.</p>
<pre><code class="language-cpp">ClassX *x = new ClassX; //OK
ClassX *x = new ClassX(); //geht auch.

ClassX xx = new ClassX(); //FEHLER: new ClassX(); liefert einen Pointer,der nicht zugewiesen werden kann.
ClassX xx = new ClassX; //FEHLER, siehe oben.
</code></pre>
<p>normale Objekte werden ohne new erzeugt:</p>
<pre><code class="language-cpp">ClassX xx; //OK
ClassX xx(); //FEHLER: der Compiler interpretiert das als Funktionsdeklaration.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1867924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867924</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 12 Mar 2010 12:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 12:13:40 GMT]]></title><description><![CDATA[<p>Ich gehe gerade einen Foliensatz durch wo C++ mit Java verglichen wird. Ihr habt Recht, die jeweils zweite Zeile ist aus Java, ohne das ich es gemerkt habe.</p>
<p>Bleibt noch die Frage warum ich bei new die Klammern weglassen sollte? (Beispiel in der ersten Zeile.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867939</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Fri, 12 Mar 2010 12:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 12:22:58 GMT]]></title><description><![CDATA[<p>... schrieb:</p>
<blockquote>
<p>Bleibt noch die Frage warum ich bei new die Klammern weglassen sollte? (Beispiel in der ersten Zeile.)</p>
</blockquote>
<p>Ich sehe da keinen besonderen Grund für. Wird in deinem Script nichts dazu gesagt? Es compiliert beides und macht auch das selbe. Das einzige was ich mir vorstelln könnte ist die Parallele zur normalen Objekterzegung auf dem Stack, wo bei default-konstruierten Objekten die Klammern weggelassen werden müssen, eben weil der Compiler das als Funktionsdeklaration parst. Das deswegen auch bei dynamischer Allokation zu machen halte ich bestenfalls für fragwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867952</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 12 Mar 2010 12:22:58 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 12:26:26 GMT]]></title><description><![CDATA[<p>Stimmt Pumuckl, das war es! Ich kann mich schwach erinnern (Vorlesung) das es mit der Funktionsdeklaration zusammenhing. Vielen Dank für die Erinnerung <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/1867955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867955</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Fri, 12 Mar 2010 12:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 13:06:50 GMT]]></title><description><![CDATA[<p>Für lokale Variablen hat pumuckl ja schon geschrieben, daß nur die Version ohne Klammern funktioniert (da es sonst als Funktionsdeklaration angesehen wird).</p>
<p>Und für die Verwendung von new:<br />
Bei Klassen ist es egal, da immer der Default-Konstruktor aufgerufen wird.<br />
Bei PODs wird mit Klammern der Wert mit Null initialisiert, z.B.</p>
<pre><code class="language-cpp">int *x = new int;
std::cout &lt;&lt; *x; // irgendwein Wert (was eben gerade so im Speicher liegt -)

int *y = new int();
std::cout &lt;&lt; *y; // hier sollte jetzt immer 0 ausgegeben werden!
</code></pre>
<p>Gerade bei allgemeiner Template-Programmierung sollte man das beachten, d.h.</p>
<pre><code class="language-cpp">template&lt;typename T&gt; void Test()
{
  T *t = new T();

  std::cout &lt;&lt; *t;

  // ...
}
</code></pre>
<p>Nachtrag:<br />
auch für lokale Variablen kann man das &quot;mit Null initialisieren&quot; erzwingen:</p>
<pre><code class="language-cpp">int x = int(); // da &quot;int x()&quot; ja anders interpretiert wird

//bzw. in templates
T t = T();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1867960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867960</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 12 Mar 2010 13:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to new mit Klammern? Warum? on Fri, 12 Mar 2010 12:43:07 GMT]]></title><description><![CDATA[<p>Das die PODs dabei auf 0 gesetzt werden wußre ich nicht. Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867967</guid><dc:creator><![CDATA[...]]></dc:creator><pubDate>Fri, 12 Mar 2010 12:43:07 GMT</pubDate></item></channel></rss>