<?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[Placement New?]]></title><description><![CDATA[<p>seh ich das richtig, das anfangs (A) ein Buffer von 1000 bytes reserviert wird,<br />
und über placment new (B) ein string mit 2 bytes in den schon reservieren bereich geschrieben wird, so das (B) kein neuen speicher reserviernem muss, und man so sicehr gehen kann das speicehr da ist?</p>
<pre><code class="language-cpp">/*A*/ char *buf  = new char[1000];   //pre-allocated buffer
 /*B*/	string *p = new (buf) string(&quot;hi&quot;);  //placement new
</code></pre>
<p>wenn ich jetzt bspw. eine Klasse</p>
<pre><code class="language-cpp">class foo{

int A;
char B;
float C;

};
</code></pre>
<p>habe und diese mit placment new anlegen will.. wie geh ich da vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/187685/placement-new</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 19:43:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187685.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jul 2007 04:52:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 04:52:57 GMT]]></title><description><![CDATA[<p>seh ich das richtig, das anfangs (A) ein Buffer von 1000 bytes reserviert wird,<br />
und über placment new (B) ein string mit 2 bytes in den schon reservieren bereich geschrieben wird, so das (B) kein neuen speicher reserviernem muss, und man so sicehr gehen kann das speicehr da ist?</p>
<pre><code class="language-cpp">/*A*/ char *buf  = new char[1000];   //pre-allocated buffer
 /*B*/	string *p = new (buf) string(&quot;hi&quot;);  //placement new
</code></pre>
<p>wenn ich jetzt bspw. eine Klasse</p>
<pre><code class="language-cpp">class foo{

int A;
char B;
float C;

};
</code></pre>
<p>habe und diese mit placment new anlegen will.. wie geh ich da vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330489</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 23 Jul 2007 04:52:57 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:15:31 GMT]]></title><description><![CDATA[<p>Placement new nimmt vorhandenen Speicher um Objekte darin zu konstruieren. Das bedeutet das <strong>kein</strong> weiterer Speicher reserviert werden muss, die Objekte nutzen lediglich den vorhandenen Speicher. Dein Beispiel Konstruiert ein String Objekt in den ersten Bytes deines Puffers, der Rest des Puffers ist in dem Fall einfach ungenutzt.</p>
<p>Bei deiner Struktur gehst du genauso vor:</p>
<pre><code class="language-cpp">foo* p = new ( buf ) foo;
</code></pre>
<p>Da du aber keinen Standardkonstruktor definiert hast werden die Membervariablen nicht initialisiert und der, vom Compiler erzeugte, Standard c'tor verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330517</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:15:31 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:18:36 GMT]]></title><description><![CDATA[<p>und wann wird placment new verwendet?</p>
<p>Um sicher zu gehen das speicher vorhanden ist?<br />
Und um erhöhte Performance zu ereichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330519</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:18:36 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:21:19 GMT]]></title><description><![CDATA[<p>Wenn du ein Array von nicht konstruierten Elementen haben willst (kann mit unter viel schneller sein). Oder wenn du eine Array von Elementen haben willst und diese Elemente bieten keinen standard c'tor an.</p>
<p>Versuch mal: <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>
<pre><code class="language-cpp">struct foo
{
    foo( int x ) {}
};

int main()
{
    foo* p = new foo[ 10 ];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1330523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330523</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:27:03 GMT]]></title><description><![CDATA[<p>du meinst:</p>
<pre><code class="language-cpp">foo* p = new (buf) foo[ 10 ];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1330530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330530</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:27:03 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:29:27 GMT]]></title><description><![CDATA[<p>Nein, ich <strong>meine</strong> das was ich gepostet habe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330532</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:30:52 GMT]]></title><description><![CDATA[<p>achso du dachte du legst mehre instanzen des objekts also das array in den bereits reservieren bereich? aber würde das gehen so wie ich es geschrieben habe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1330533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330533</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 06:36:48 GMT]]></title><description><![CDATA[<p>Nein! Eher so:</p>
<pre><code class="language-cpp">// Speicher reservieren
char* buff = ( char* ) ::operator new( 10*sizeof( foo ) );
foo* my_array[ 10 ];

// Konstruieren mit foo::foo( int )
for ( int i = 0; i &lt; 10; ++i )
{
	my_array[ i ] = new ( buff+sizeof( foo )*i ) foo( i );
}

// Zerstören
for ( int i = 0; i &lt; 10; ++i )
{
	my_array[ i ]-&gt;~foo();
}

// Speicher freigeben!
::operator delete( buff );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1330534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330534</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Mon, 23 Jul 2007 06:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to Placement New? on Mon, 23 Jul 2007 08:20:49 GMT]]></title><description><![CDATA[<p>verwenden kannst du das beim eigenen speichermanagement (wenn z.b. du immer pools haben willst). manche objekte regestrieren sich im c-tor irgendwo, das moechtest du vielleicht garnicht, aber du willst den pool schon haben also<br />
new char[sizeof(CMyClass)*POOLSIZE];<br />
und dann bei jeder instanzierung den inplacement new. manchmal hast du auch keinen default c-tor, willst aber den speicher im voraus anlegen weil du weisst dass du gleich z.b 1mio objekte generieren wirst.<br />
manchmal haben die objekte auch ne dynamische groesse z.b.</p>
<pre><code class="language-cpp">class foo
{
privat:
  int  m_Size;
  char m_ObjList[1];
public:
       foo(int Size):m_Size(Size){}
};
//on alloc
pData = new char[sizeof(foo)+ObjCount];
new (pData) foo(ObjCount);
</code></pre>
<p>so sparst du dir den overhead vom zusaetzlichen new in foo und den pointer auf eine ObjList.</p>
<p>gibt grenzenlose moeglichkeiten <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/1330590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1330590</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Mon, 23 Jul 2007 08:20:49 GMT</pubDate></item></channel></rss>