<?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[Dynamisches Array auf dem Heap OHNE Konstructor&#x2F;Destructor Aufruf erzeugen?]]></title><description><![CDATA[<p>Hallo Forum</p>
<p>Gegeben ist eine Funktion die überprüft ob sich ein Punkt Innerhalb eines Polygons befindet oder nicht.<br />
Dazu wird der Funktion ein Array aus Koordinaten Classen übergeben.<br />
Etwa so.</p>
<pre><code class="language-cpp">bool contains(const cPoint Points[], size_t Size, const cPoint &amp;Point);
</code></pre>
<p>Zu meiner Frage.<br />
In einen Test, ob ein Punkt Innerhalb eines Objektes liegt, wird die Außenkante des Objektes in Polygonpunkte zerlegt und dann der Funktion zum Testen übergeben. Als einfache Version sieht das so aus.</p>
<pre><code class="language-cpp">...
...
vector&lt; cPoint &gt; Points;

// Zerlege und Speicher die Punkte
Points.push_back(Point);

...
contains(&amp;Points.front(), Points.size(), TestPunkt);
</code></pre>
<p>Das ist aber Schnecken Code. Sehr langsam. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich möchte also das Koordinaten Array auf den Heap erzeugen. Ich habe zwar nicht die Information wieviel Punkte das Array brauchen wird, aber ich habe die Information der Maximal Möglichen Punkt (Kein Statischer Wert). Also ran an den Speck.</p>
<pre><code class="language-cpp">...
...
cPoint Points[ MaximalPunkte_Errechnet ];

...
// Punkte füllen und merken wieviel ich benutzt habe
...
contains(Points, GebrauchtePunkte, TestPunkt);
...
</code></pre>
<p>Was mich jetzt aber noch Stört ist das beim Anlegen des Arrays n Punkte Konstruiert werden und beim Verlassen der Funktion n Punkte über den Destructor Zerstört werden.</p>
<p>Nehmen wir mal an das maxmimal 100 Punkte im Array sein können, aber nur 25 gebraucht werden. So werden 75 Point Klassen unnötig angelegt und zerstört.</p>
<p>Hier suche ich eine Möglichkeit wie man das Lösen könnte.<br />
Vielleicht hat jemand auch eine Möglichkeit wie man das in ein Objekt Verpacken kann da ich an mehreren Stellen so eine Dynamische Erzeugung von Koordinaten Arrays habe.</p>
<p>Danke Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286071/dynamisches-array-auf-dem-heap-ohne-konstructor-destructor-aufruf-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 02:40:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286071.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 May 2011 08:54:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Array auf dem Heap OHNE Konstructor&#x2F;Destructor Aufruf erzeugen? on Tue, 03 May 2011 08:54:24 GMT]]></title><description><![CDATA[<p>Hallo Forum</p>
<p>Gegeben ist eine Funktion die überprüft ob sich ein Punkt Innerhalb eines Polygons befindet oder nicht.<br />
Dazu wird der Funktion ein Array aus Koordinaten Classen übergeben.<br />
Etwa so.</p>
<pre><code class="language-cpp">bool contains(const cPoint Points[], size_t Size, const cPoint &amp;Point);
</code></pre>
<p>Zu meiner Frage.<br />
In einen Test, ob ein Punkt Innerhalb eines Objektes liegt, wird die Außenkante des Objektes in Polygonpunkte zerlegt und dann der Funktion zum Testen übergeben. Als einfache Version sieht das so aus.</p>
<pre><code class="language-cpp">...
...
vector&lt; cPoint &gt; Points;

// Zerlege und Speicher die Punkte
Points.push_back(Point);

...
contains(&amp;Points.front(), Points.size(), TestPunkt);
</code></pre>
<p>Das ist aber Schnecken Code. Sehr langsam. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich möchte also das Koordinaten Array auf den Heap erzeugen. Ich habe zwar nicht die Information wieviel Punkte das Array brauchen wird, aber ich habe die Information der Maximal Möglichen Punkt (Kein Statischer Wert). Also ran an den Speck.</p>
<pre><code class="language-cpp">...
...
cPoint Points[ MaximalPunkte_Errechnet ];

...
// Punkte füllen und merken wieviel ich benutzt habe
...
contains(Points, GebrauchtePunkte, TestPunkt);
...
</code></pre>
<p>Was mich jetzt aber noch Stört ist das beim Anlegen des Arrays n Punkte Konstruiert werden und beim Verlassen der Funktion n Punkte über den Destructor Zerstört werden.</p>
<p>Nehmen wir mal an das maxmimal 100 Punkte im Array sein können, aber nur 25 gebraucht werden. So werden 75 Point Klassen unnötig angelegt und zerstört.</p>
<p>Hier suche ich eine Möglichkeit wie man das Lösen könnte.<br />
Vielleicht hat jemand auch eine Möglichkeit wie man das in ein Objekt Verpacken kann da ich an mehreren Stellen so eine Dynamische Erzeugung von Koordinaten Arrays habe.</p>
<p>Danke Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057625</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Tue, 03 May 2011 08:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array auf dem Heap OHNE Konstructor&#x2F;Destructor Aufruf erzeugen? on Tue, 03 May 2011 08:59:38 GMT]]></title><description><![CDATA[<p>Indem Du Dein cPoints-Array (oder Deinen cPoints-Vektor) irgendwo hältst und wiederverwendest. Außerdem benutzt Du in Deiner &quot;optimierten&quot; Version gerade <em>nicht</em> den Freispeicher, sondern den automatischen Speicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057628</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 03 May 2011 08:59:38 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array auf dem Heap OHNE Konstructor&#x2F;Destructor Aufruf erzeugen? on Tue, 03 May 2011 12:48:12 GMT]]></title><description><![CDATA[<p>Mmm habe ich mir schon gedacht das ich da so eine Art &quot;Temporäres Koordinaten Array Pool&quot; Basteln muss. Nicht ganz so schön.</p>
<p>Muss ja verhindern das sich jemand so ein Array holt und nicht mehr zurück gibt.</p>
<p>Lichtlein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057747</guid><dc:creator><![CDATA[Lichtlein]]></dc:creator><pubDate>Tue, 03 May 2011 12:48:12 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Array auf dem Heap OHNE Konstructor&#x2F;Destructor Aufruf erzeugen? on Tue, 03 May 2011 15:39:54 GMT]]></title><description><![CDATA[<p>Lichtlein schrieb:</p>
<blockquote>
<p>Das ist aber Schnecken Code. Sehr langsam. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Warum ist der Code langsam? Machen die dynamischen Allokationen von <code>std::vector</code> wirklich den Grossteil aus? Kann ich mir nicht gut vorstellen, gerade wenn der Algorithmus dahinter etwas komplexer wird.</p>
<p>Ansonsten versuche mal <code>std::vector::reserve()</code> einzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2057916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2057916</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 03 May 2011 15:39:54 GMT</pubDate></item></channel></rss>