<?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[Initialisierliste, mit new erzeugtes Objekt]]></title><description><![CDATA[<p>Hallo, ich habe ein kleines syntaktisches Problem:</p>
<pre><code class="language-cpp">boost::array&lt;int, 4&gt; test = { 1, 2, 3, 4 };   // ok
</code></pre>
<p>Wie funktioniert es, wenn ich das array auf dem Heap anlege? Rein syntaktisch, meine ich. Ich suche also sowas wie</p>
<pre><code class="language-cpp">boost::array&lt;int, 4&gt;* test = new boost::array&lt;int, 4&gt;() = { 1, 2, 3, 4 };
</code></pre>
<p>aber es sollte compilieren <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="😉"
    /> Ich kann übrigens auf die Initialisierung nicht verzichten, da es in Wirklichkeit keine ints sind und auch nichts, was einen Standardkonstruktor hat.</p>
<p>Danke, an den ersten, der dieses Rätsel lösen kann. <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/topic/240806/initialisierliste-mit-new-erzeugtes-objekt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 19:32:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240806.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 11 May 2009 20:43:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 20:43:59 GMT]]></title><description><![CDATA[<p>Hallo, ich habe ein kleines syntaktisches Problem:</p>
<pre><code class="language-cpp">boost::array&lt;int, 4&gt; test = { 1, 2, 3, 4 };   // ok
</code></pre>
<p>Wie funktioniert es, wenn ich das array auf dem Heap anlege? Rein syntaktisch, meine ich. Ich suche also sowas wie</p>
<pre><code class="language-cpp">boost::array&lt;int, 4&gt;* test = new boost::array&lt;int, 4&gt;() = { 1, 2, 3, 4 };
</code></pre>
<p>aber es sollte compilieren <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="😉"
    /> Ich kann übrigens auf die Initialisierung nicht verzichten, da es in Wirklichkeit keine ints sind und auch nichts, was einen Standardkonstruktor hat.</p>
<p>Danke, an den ersten, der dieses Rätsel lösen kann. <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/1709194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709194</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 11 May 2009 20:43:59 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 21:07:25 GMT]]></title><description><![CDATA[<p>Soviel ich weiss, ist das nicht möglich. Eventuell hilft dir aber <code>boost::assign::list_of</code> .</p>
<p>Aber wieso willst du ein statisches Array ( <code>boost::array</code> ist eigentlich nur ein Wrapper für C-Arrays) dynamisch anlegen? Wäre da <code>std::vector</code> nicht eher was?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709203</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 11 May 2009 21:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 21:23:58 GMT]]></title><description><![CDATA[<p>Ich habe sozusagen ein optionales array als member. Es ist ein Quadtree, der Kinder hat oder nicht. Der Member ist ein std::auto_ptr&lt;boost::array&lt;Quadtree, 4&gt;&gt; und kann natürlich ein nullptr sein, oder ein array der Größe 4. Na, wenn's nicht geht, dann verkünstel ich mich jetzt aber auch nicht weiter. Thx.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709212</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 11 May 2009 21:23:58 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 21:35:39 GMT]]></title><description><![CDATA[<p>Wenn die Dimension sowieso immer 4 beträgt, könntest du doch eine eigene Klasse schreiben und entsprechende Konstruktoren bereitstellen. Dann wärst du auch zusätzlich flexibel, falls du plötzlich Funktionalität hinzufügen möchtest, und könntest gleichzeitig etwas von den Zeigern abstrahieren. Ist nur so ein Vorschlag... <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/1709216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709216</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 11 May 2009 21:35:39 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 21:41:22 GMT]]></title><description><![CDATA[<p>Ganz blöder Vorschlag:</p>
<pre><code class="language-cpp">boost::array&lt;int, 4&gt; const temp = { 0, 1, 2, 3 };
boost::array&lt;int, 4&gt;* p = new boost::array&lt;int, 4&gt;(temp);
</code></pre>
<p>Womöglich ist der Kompiler klug genug, dies wegzuoptimieren <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>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709218</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 11 May 2009 21:41:22 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 21:45:02 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Womöglich ist der Kompiler klug genug, dies wegzuoptimieren <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>Falls nicht (was ich hier befürchte) hat man viele unnötige Konstruktionen - denk dran, es geht Optimizer nicht um <code>int</code> s. Je nachdem kann sich das beim Quadtree ziemlich negativ auswirken. Abgesehen davon weisst du nicht, ob die Objekte überhaupt kopierfähig sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709219</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 11 May 2009 21:45:02 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 21:49:47 GMT]]></title><description><![CDATA[<p>Sind sie nicht. Der Vorschlag mit der eigenen Klasse: Ich probier's grad, aber ich glaub das wird scheiße. Ich hatte an sowas gedacht:</p>
<pre><code class="language-cpp">class ChildCollection {
	public:
		ChildCollection(const Area&amp; parentArea);
		boost::array&lt;Quadtree, 4&gt;::iterator begin();
		boost::array&lt;Quadtree, 4&gt;::iterator end();

	private:
		boost::array&lt;Quadtree, 4&gt; children;
	};
</code></pre>
<p>Aber ich kann das array natürlich wieder nicht richtig initialisieren. Ich seh's jedenfalls nicht, wie das in der Initialisierliste gehen soll und nen Standardkonstruktor gibts nicht, da es für den Quadtree auch keinen gibt. Es endet also wieder mit Quadtree* als array-Element, dann kann ich mir aber die eigene Klasse sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709220</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 11 May 2009 21:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 22:08:42 GMT]]></title><description><![CDATA[<p>Muss es unbedingt <code>boost::array</code> sein? Dieser Container scheint mir für dein Vorhaben ziemlich ungeeignet.</p>
<p>Die STL-Container fallen auch weg, weil deine Objekte nicht kopierbar sind (Zeiger und SmartPointer sind wahrscheinlich unnötig/mühsam). Naheliegend wären für mich die <em>Boost.PointerCointainer</em>, z.B. <code>boost::ptr_vector</code> . Oder du schreibst einen eigenen Container, was allerdings nicht mit wenig Aufwand verbunden ist, wenn du auch Iteratoren unterstützen willst.</p>
<p>Ich bin mir allerdings eh nicht ganz sicher, was du genau tun willst. Sollte <code>ChildCollection</code> -Konstruktor nicht vier Parameter haben? Oder erstellst du die <code>Quadtree</code> -Unterbäume erst im Konstruktor selbst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709233</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 11 May 2009 22:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 22:19:28 GMT]]></title><description><![CDATA[<p>Ich erstelle sie zwangsläufig erst bei der Konstruktion der ChildCollection, weil sie nicht kopierbar sind. Zeiger wollte ich vermeiden, weil ich sonst wieder einen Destruktor brauche. Klar, das ist alles nicht furchtbar dramatisch, ich frage mich halt was eine wirklich coole Lösung wäre.</p>
<p>Du hast mich immerhin auf <a href="http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_array.html" rel="nofollow">ptr_array</a> gebracht, das hört sich schon mal besser an als alles was ich bisher ausprobiert habe. Kann iterieren, brauche keinen eigenen Destruktor, fast schon geil. Nur die child Quadtrees sind auf dem Heap allokiert. Da komm ich wahrscheinlich nicht drum herum, wenn ich es nicht schaffe, ein Array zu initialisieren. Im Moment ist das meine favorisierte Lösung. <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/1709244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709244</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 11 May 2009 22:19:28 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 22:26:33 GMT]]></title><description><![CDATA[<p>Hm, <code>boost::ptr_array</code> scheint ein recht guter Kompromiss zu sein, war mir bisher selber nicht bekannt. Ich dachte, die Pointer-Container gäbe es nur als Äquivalent zu den STL-Containern. <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>
<p>Die QuadTrees sollten auch auf dem Heap allokiert sein. Ich kann mir vorstellen, dass das Ganze grösser werden könnte, und mit dem Heap bist du diesbezüglich viel flexibler. Ich denke hingegen eher nicht, dass der Performancenachteil durch dynamische Allokationen derart dramatisch sein sollte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709246</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 11 May 2009 22:26:33 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Mon, 11 May 2009 22:36:11 GMT]]></title><description><![CDATA[<p>Natürlich, es sind alles Luxusprobleme, da sind wir uns einig. <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="🙂"
    /> ptr_array ist auf den ersten Blick komisch. Der Zugriff ist trotzdem über Referenzen, jetzt kann ich offenkundig nicht myArray[0] zuweisen, weil dann würde ich den Quadtree zu kopieren versuchen. Beim ptr_vector isses klar, da würde ich ein push_back machen. Naja ich geh jetzt schlafen. Vielleicht mache ich morgen eine vollkommen uncoole und einfache Lösung. <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/1709252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709252</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 11 May 2009 22:36:11 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Tue, 12 May 2009 00:10:32 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Foo
{
    boost::array&lt;boost::optional&lt;Quadtree&gt;, 4&gt; children; // Quadtree muss _nicht_ default konstruierbar sein!
};
</code></pre>
<p>Initialisieren kannst du das dann entweder über copy-construction (einfach zuweisen - intern wird dann der copy-ctor aufgerufen), oder über eine in-place-factory (was die unnötige Kopie vermeiden würde).</p>
<p>p.S.: boost::optional ist IMO eine sehr interessante, aber oft &quot;übersehene&quot; Library.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709264</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 12 May 2009 00:10:32 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Tue, 12 May 2009 08:29:19 GMT]]></title><description><![CDATA[<p>Hmmm. Also optionals statt pointer, das erlaubt evtl. einen noch günstigeren Zugriff und löst das Destruktor-Problem. Dafür wird die Konstruktion umständlicher und das Objekt ist immer so groß, auch wenn es keine Kindknoten hat. (Letzteres stört mich etwas. Aber ok, kann man sich auch überlegen, thx. <em>EDIT: ne is quatsch, die child-collection gibt's ja nur, wenn der Knoten Kinder hat</em>)</p>
<p>Ich tendiere jetzt trotzdem eher zum unschönen array&lt;Quadtree*, 4&gt;, außer ich krieg das ptr_array noch zum laufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709311</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 12 May 2009 08:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Tue, 12 May 2009 09:34:01 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>,<br />
Danke für den Hinweis wegen boost::optional, hab das Ding tatsächlich noch nie gesehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>@Optimizer,</p>
<pre><code class="language-cpp">#include &lt;boost/ptr_container/ptr_array.hpp&gt;

int main()
{
	boost::ptr_array&lt;boost::nullable&lt;int&gt;, 4&gt; arr;

	arr.replace&lt;0&gt;(new int(0));
	arr.replace&lt;1&gt;(new int(1));
	arr.replace&lt;2&gt;(new int(2));
	arr.replace&lt;3&gt;(new int(3));

	return 0;
}
</code></pre>
<p>Wenn du die Objekte im <code>ptr_array</code> nicht wieder auf 0 zurücksetzen möchtest, dann kannst du auf <code>boost::nullable</code> verzichten. Ohne <code>boost::nullable</code> darfst du aber nie bei replace eine 0 übergeben, sonst hast eine Exception am Hals.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709332</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 12 May 2009 09:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierliste, mit new erzeugtes Objekt on Tue, 12 May 2009 13:31:47 GMT]]></title><description><![CDATA[<p>Danke, ich habe es tatsächlich mit dem replace nicht gecheckt und das IntelliSense checkt auch überhaupt nichts mehr so dass ich es gar nicht gesehen habe. Das nullable ist hässlich, aber das brauche ich zum Glück nicht. Entweder gibt es alle vier Kinder oder keines, deswegen verwende ich jetzt einen auto_ptr&lt;ptr_array&lt;Quadtree, 4&gt;&gt;.</p>
<p>Damit hab ich jetzt endgültig 2 Indirektionen zu den Kindknoten hin, aber ansonsten ist alles ziemlich geil, zum Beispiel kann ich die Kinder alle entfernen indem ich einfach den auto_ptr resette.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1709432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1709432</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 12 May 2009 13:31:47 GMT</pubDate></item></channel></rss>