<?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[Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden?]]></title><description><![CDATA[<p>Also ich meine wenn man sagt new int[20](); ob die Klammern überhaupt irgendwas annehmen, oder ob die nur leer akzeptiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209175/kann-unter-irgendwelchen-umständen-etwas-in-die-klammern-bei-new-geschrieben-werden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 12:33:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209175.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Mar 2008 15:40:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 15:40:51 GMT]]></title><description><![CDATA[<p>Also ich meine wenn man sagt new int[20](); ob die Klammern überhaupt irgendwas annehmen, oder ob die nur leer akzeptiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481526</guid><dc:creator><![CDATA[()]]></dc:creator><pubDate>Thu, 27 Mar 2008 15:40:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:02:13 GMT]]></title><description><![CDATA[<p>operator new[] ruft imho immer den Default-Konstruktor auf. Es ist also nicht möglich Parameter zu übergeben (wenn man von Default-Parametern absieht).</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481536</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:10:07 GMT]]></title><description><![CDATA[<p>Don06 schrieb:</p>
<blockquote>
<p>operator new[] ruft imho immer den Default-Konstruktor auf. Es ist also nicht möglich Parameter zu übergeben (wenn man von Default-Parametern absieht).</p>
<p>Gruß<br />
Don06</p>
</blockquote>
<p>Falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481546</guid><dc:creator><![CDATA[-100 Punkte]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:24:24 GMT]]></title><description><![CDATA[<p>/edit: Blödsinn meinerseits...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481550</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:18:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int* bla = new int[3](3);
</code></pre>
<pre><code>error C2075: 'Target of operator new()' : array initialization needs curly braces
</code></pre>
<p>Das selbe mit Objekttypen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481555</guid><dc:creator><![CDATA[()]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:34:15 GMT]]></title><description><![CDATA[<p>() schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int* bla = new int[3](3);
</code></pre>
<pre><code>error C2075: 'Target of operator new()' : array initialization needs curly braces
</code></pre>
<p>Das selbe mit Objekttypen.</p>
</blockquote>
<p>afaik geht das so:</p>
<pre><code class="language-cpp">int* bla = new int[3]{3, 3, 3};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1481567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481567</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:34:15 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:36:50 GMT]]></title><description><![CDATA[<blockquote>
<p>int* bla = new int[3]{3, 3, 3};</p>
</blockquote>
<pre><code>error C2143: syntax error : missing ';' before '{'
</code></pre>
<p>Aber das war ja auch gar nicht die Frage, sondern ob die Klammern überhaupt unter irgendwelchen Umständen nicht leer sein können</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481570</guid><dc:creator><![CDATA[()]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 16:46:26 GMT]]></title><description><![CDATA[<p>mein obiger Beitrag war natürlich völliger Humbug. Die Konstruktor-Argumente für die einzelnen Array-Elemente sind natürlich in geschweiften Klammern zu übergeben.<br />
Aber: es ist möglich, operator new mit mehr Argumenten als dem obligatorischen size_t zu überladen, z.B. gibts standardmäßig die überladungen mit void* oder std::nothrow_t als zweitem Parameter (inplace-new und nothrow-new). Entsprechend kann auch operator new[] mit zusätzlichen parametern aufgerufen werden, bsp:</p>
<pre><code class="language-cpp">int* array = new int[29](std::nothrow); //nothrow-new
class C;
void* ptr = ::operator new[](10*sizeof(C)); // nur Speicher holen
C* cptr = new C[10](ptr); //placement-new

class D {
  /*...*/
  operaotr new[](size_t size, int i, char c); //eigene Erfindung
};
D* dptr = new D[12](5, 'f'); //Aufruf der eigenen Erfindung
</code></pre>
<p>bei der dritten Zeile bin ich mir nicht ganz sicher, ob das so korrekt ist, aber irgenwie in der Art kann man sich &quot;rohen&quot; Speicher besorgen.<br />
Tatsache ist: man muss zwischen der Funktion <code>operator new</code> und dem Operator <code>new</code> unterscheiden:</p>
<ul>
<li><code>operator new</code> kann man überladen und wird hier in Zeile 3 explizit aufgerufen wird, sonst (normalerweise) nur indirekt durch den Operator <code>new</code><br />
- der Operator <code>new</code> ist nicht überladbar. Er ruft den jeweiligen <code>operator new</code> auf und konstruiert danach die Objekte im entsprechenden Speicherbereich.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1481577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481577</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 Mar 2008 16:46:26 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 17:08:25 GMT]]></title><description><![CDATA[<p>Kannst du zum dritten ein vollständiges Beispiel posten?<br />
Weil bei mir machters net.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481587</guid><dc:creator><![CDATA[()]]></dc:creator><pubDate>Thu, 27 Mar 2008 17:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 21:17:09 GMT]]></title><description><![CDATA[<p>Der new-Operator nimmt zusätzliche Argumente auf zweierlei Weise an:<br />
1. unmittelbar nach dem Schlüsselwort new: diese sog. placement-Form erlaubt es, zusätzliche Argumente an die Allokationsfunktion (also die operator new-Funktion) zu übergeben. Die Bezeichnung placement-new leitet sich von der Standardvariante ab, bei der zusätzlich ein Zeiger auf bereits reservierten Speicher übergeben wird, um das neue Objekt dort zu erstellen. nothrow new führt streng genommen keine platzierte Objekterstellung durch, trotzdem fällt dies unter den gleichen Begriff. Während der delete-Operator keine placement-Form hat, werden entsprechende operator delete-placement-Funktionen dennoch dann aufgerufen, wenn bei einem placement-new-Aufruf bei der Erzeugung des Objektes eine Exception auftritt (das kann also nur bei Klassen oder Arrays aus solchen Klassen passieren, die über einen nicht-trivialen Konstruktor verfügen).</p>
<p>2. nach der typeid oder new-typeid. Falls der bezeichnete Typ kein Array ist, können in Klammern ein initialisierender Ausdruck bzw. Konstruktorargumente angegeben werden. Ein leeres Klammerpaar führt dagegen zu value-Initialisierung des Objektes. Werden keine Klammern angegeben, so wird das Objekt nur Initialisiert, wenn es sich nicht um ein POD handelt, dann wird das Objekt ebenfalls value-Initialisiert. Falls der Typ ein Array ist, so ist nur ein leeres Klammerpaar oder dessen Auslassung (bei ansonsten gleicher Semantik) zulässig - es ist also nicht möglich, bestimmte Argumente für die einzelnen Elemente des Arrays anzugeben.<br />
Es ist ebenfalls <em>nicht</em> möglich, diese Argumente auf dem Umweg eines placement-news doch noch (direkt) eine andere Initialisierung durchzuführen. Falls es sich nicht um ein Array aus PODs handelt, ist das sowieso klar: was immer die placement-new-Funktion mit dem Speicher anstellt, die darauffolgende Initialisierung wird das immer zunichte machen. Aber auch bei PODs ist es nicht anders: in diesem Falle ist der Inhalt nach dem new-Operator unbestimmt (5.3.4/15) un muss nicht vom Inhalte des Speichers unmittelbar nach der Rückkehr aus der Allokationsfunktion abhängen. Wäre das anders, könnte man das Standard-placement-new als elegante (und ausnahmsweise mal legale) Variante des &quot;union-casts&quot; betrachten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:</p>
<pre><code class="language-cpp">int* array = new int[29](std::nothrow); //nothrow-new
class C;
void* ptr = ::operator new[](10*sizeof(C)); // nur Speicher holen
C* cptr = new C[10](ptr); //placement-new
</code></pre>
<p>es muss heißen:</p>
<pre><code class="language-cpp">int* array = new(std::nothrow) int[29];
C* cptr = new(ptr) C[10];
</code></pre>
<p>(C muss selbstverständlich an dieser Stelle auch noch vollständig definiert sein)</p>
<pre><code class="language-cpp">class D {
  /*...*/
  operator new[](size_t size, int i, char c); //eigene Erfindung
};
D* dptr = new D[12](5, 'f'); //Aufruf der eigenen Erfindung
</code></pre>
<p>dito:</p>
<pre><code class="language-cpp">D* dptr = new(5,'f') D[12];
</code></pre>
<p>Aber dies kann, wie schon beschrieben, <em>nicht</em> dazu benutzt werden, um die Ds doch noch auf andere Weise zu initialisieren.</p>
<p>Bleibt noch zu erwähnen, dass sich in C++0x bei der Initialisierungssyntax einiges ändern wird, wenn ich mich richtig erinnere, betrifft dies auch den new-Operator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481747</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 27 Mar 2008 21:17:09 GMT</pubDate></item><item><title><![CDATA[Reply to Kann unter irgendwelchen Umständen etwas in die Klammern bei new[] geschrieben werden? on Thu, 27 Mar 2008 21:26:30 GMT]]></title><description><![CDATA[<p>Sry war da wiedermal nicht ganz Syntax-sicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1481752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1481752</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 27 Mar 2008 21:26:30 GMT</pubDate></item></channel></rss>