<?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[Adresse zum Konstruktor und new Semantik]]></title><description><![CDATA[<p>Ich wollte für einen allokierten Adressbereich den Konstruktor eine Klasse manuell aufrufen, doch irgendwie weigert sich der VC++ Kompiler dies für mich zu tun. Ich komme weder an die Adresse des Konstruktors noch kann das so machen:</p>
<pre><code>Object* o = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Object));
new (o) Object(Parameter);
</code></pre>
<p>Da der Kompiler diesen Syntax nicht mag, was der GCC allerdings schluckt.<br />
Wie kann ich den Konstruktor für einen allokierten Bereich im Arbeitsspeicher mit dem VC++-Kompiler aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326386/adresse-zum-konstruktor-und-new-semantik</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 06:20:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326386.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jun 2014 13:23:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Adresse zum Konstruktor und new Semantik on Sun, 15 Jun 2014 13:23:31 GMT]]></title><description><![CDATA[<p>Ich wollte für einen allokierten Adressbereich den Konstruktor eine Klasse manuell aufrufen, doch irgendwie weigert sich der VC++ Kompiler dies für mich zu tun. Ich komme weder an die Adresse des Konstruktors noch kann das so machen:</p>
<pre><code>Object* o = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Object));
new (o) Object(Parameter);
</code></pre>
<p>Da der Kompiler diesen Syntax nicht mag, was der GCC allerdings schluckt.<br />
Wie kann ich den Konstruktor für einen allokierten Bereich im Arbeitsspeicher mit dem VC++-Kompiler aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403996</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Sun, 15 Jun 2014 13:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse zum Konstruktor und new Semantik on Sun, 15 Jun 2014 13:29:49 GMT]]></title><description><![CDATA[<p>hattu &lt;new&gt; inkludiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2403997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403997</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 15 Jun 2014 13:29:49 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse zum Konstruktor und new Semantik on Sun, 15 Jun 2014 13:32:22 GMT]]></title><description><![CDATA[<pre><code>#include &lt;new&gt;
</code></pre>
<p>Ansonsten kann es sein, dass andere <code>new</code> -Operatoren überladen sind, und du das Argument nach <code>void*</code> casten musst.</p>
<pre><code>new (static_cast&lt;void*&gt;(o)) Object(Parameter);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2403998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2403998</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 15 Jun 2014 13:32:22 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse zum Konstruktor und new Semantik on Sun, 15 Jun 2014 18:22:08 GMT]]></title><description><![CDATA[<p>Ah ok, dachte das wäre nur Syntax. Funktioniert auf jeden Fall mit dem #include &lt;new&gt;, dennoch würde mich noch interessieren wieso ich denn nicht an die Adresse des Konstruktors kommen darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404039</guid><dc:creator><![CDATA[JulianH]]></dc:creator><pubDate>Sun, 15 Jun 2014 18:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to Adresse zum Konstruktor und new Semantik on Sun, 15 Jun 2014 18:44:56 GMT]]></title><description><![CDATA[<blockquote>
<p>dennoch würde mich noch interessieren wieso ich denn nicht an die Adresse des Konstruktors kommen darf.</p>
</blockquote>
<p>Wenn in deinem Code ein <code>new</code> -Ausdruck vorkommt, wird der Speicher für das Objekt mit einer Operatorfunktion mit Namen <code>operator new</code> besorgt.</p>
<p>Es gibt zwei <em>implizit</em> deklarierte <code>operator new</code> 's, sprich, solche die vom Compiler selbst am Anfang jeder Übersetzungseinheit deklariert werden und daher nicht das Einbinden irgendeines Headers erfordern:</p>
<pre><code>void* operator new(std::size_t);
void* operator new[](std::size_t);
</code></pre>
<p>Das sind genau diejenigen die bei einem gewöhnlichen <code>new</code> -Ausdruck benötigt werden.</p>
<p>Bei <code>new int</code> wird der Speicher per <code>operator new(sizeof(int))</code> alloziert. Dementsprechend wird die erste der beiden Funktionen oben aufgerufen.<br />
Und <code>new int[a]</code> resultiert im Aufruf von <code>operator new[]( sizeof(int)*a )</code> (beachte das zusätzliche Klammerpaar). Soweit kommen wir mit den beiden Operatorfunktionen oben aus.</p>
<p>Wenn du allerdings <code>new (address) int</code> schreibst, dann passt der implizit deklarierte <code>operator new</code> nicht - denn der Aufruf, der nun gemacht wird um den Speicher zu 'allozieren', ist <code>operator new(sizeof(int), address)</code> . Und keine der Funktionen oben passt!<br />
Aber diese tut es:</p>
<pre><code>void* operator new  ( std::size_t count, void* ptr );
</code></pre>
<p>Und sie ist, zusmmen mit anderen, in <code>&lt;new&gt;</code> deklariert.<br />
Alle in <code>&lt;new&gt;</code> deklarierten Operatorfunktionen sind <a href="http://en.cppreference.com/w/cpp/memory/new/operator_new" rel="nofollow">hier</a> aufgelistet.</p>
<p>Wenn du <code>&lt;new&gt;</code> nicht einbidest, wird diese Operatorfunktion nicht vom name lookup gefunden und das ganze resultiert in einem Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2404047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2404047</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 15 Jun 2014 18:44:56 GMT</pubDate></item></channel></rss>