<?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[zeigertyp zur laufzeit ändern?]]></title><description><![CDATA[<p>hab mal wieder mit c++ angefangen und bin auf ein problem gestossen, das ich auf die schnelle nicht lösen kann.</p>
<p>folgendes:</p>
<p>im konstruktor einer klasse möchte ich ein array von objektzeigern einer anderen klasse anlegen. ich kenne aber erst im konstruktor<br />
a) die anzahl der arrayelemente und<br />
b) die klasse, deren objektzeiger ich speichern will.</p>
<p>ich hab eine klassenvariable vom typ void* angelegt, welche dann später<br />
das array aufnehmen soll.</p>
<p>void *inhalt;</p>
<p>zur laufzeit möchte ich dann das zeiger-array mit z.b. 10 elementen der klasse &quot;A&quot; erstellen. ich schreibe:</p>
<p>inhalt=new A[10];</p>
<p>das klappt auch. er instanziert jetzt aber noch nichts, sondern reserviert nur den speicher für die 10 objektreferenzen, oder?<br />
wenn ich jetzt aber das array füllen will:</p>
<p>inhalt[0]=new A();<br />
inhalt[1]=new A();</p>
<p>klappt das nicht, weil er meint &quot;pointer of type void* used in arithmetic&quot;.<br />
was kann ich tun, um dieses ziel zu erreichen?<br />
kann ich den typ des zeigers &quot;inhalt&quot; zur laufzeit von void* auf A[]* ändern?</p>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234789/zeigertyp-zur-laufzeit-ändern</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 06:57:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234789.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 Feb 2009 15:01:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 15:01:26 GMT]]></title><description><![CDATA[<p>hab mal wieder mit c++ angefangen und bin auf ein problem gestossen, das ich auf die schnelle nicht lösen kann.</p>
<p>folgendes:</p>
<p>im konstruktor einer klasse möchte ich ein array von objektzeigern einer anderen klasse anlegen. ich kenne aber erst im konstruktor<br />
a) die anzahl der arrayelemente und<br />
b) die klasse, deren objektzeiger ich speichern will.</p>
<p>ich hab eine klassenvariable vom typ void* angelegt, welche dann später<br />
das array aufnehmen soll.</p>
<p>void *inhalt;</p>
<p>zur laufzeit möchte ich dann das zeiger-array mit z.b. 10 elementen der klasse &quot;A&quot; erstellen. ich schreibe:</p>
<p>inhalt=new A[10];</p>
<p>das klappt auch. er instanziert jetzt aber noch nichts, sondern reserviert nur den speicher für die 10 objektreferenzen, oder?<br />
wenn ich jetzt aber das array füllen will:</p>
<p>inhalt[0]=new A();<br />
inhalt[1]=new A();</p>
<p>klappt das nicht, weil er meint &quot;pointer of type void* used in arithmetic&quot;.<br />
was kann ich tun, um dieses ziel zu erreichen?<br />
kann ich den typ des zeigers &quot;inhalt&quot; zur laufzeit von void* auf A[]* ändern?</p>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668110</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 15:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 15:15:54 GMT]]></title><description><![CDATA[<blockquote>
<p>das klappt auch. er instanziert jetzt aber noch nichts, sondern reserviert nur den speicher für die 10 objektreferenzen, oder?</p>
</blockquote>
<p>Doch, jedes der 10 Objekte wird konstruiert. Solang ein Standardkonstruktor vorhanden ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668120</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sun, 22 Feb 2009 15:15:54 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 16:02:48 GMT]]></title><description><![CDATA[<p>Schau dir mal std::vector und Vererbung an und mach dann sowas.</p>
<pre><code class="language-cpp">std::vector&lt;BaseClass*&gt; inhalt.
</code></pre>
<p>Und wenn du es ganz schön machen willst, dann nimm share Pointer oder ähnliches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668147</guid><dc:creator><![CDATA[Titel_]]></dc:creator><pubDate>Sun, 22 Feb 2009 16:02:48 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 16:05:33 GMT]]></title><description><![CDATA[<p>Titel_ schrieb:</p>
<blockquote>
<p>Und wenn du es ganz schön machen willst, dann nimm share Pointer oder ähnliches.</p>
</blockquote>
<p>Wieso ist das dann <em>ganz schön</em>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668153</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Sun, 22 Feb 2009 16:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 16:24:10 GMT]]></title><description><![CDATA[<p>Also ersteinmal, new gibt ein zeiger zurück.<br />
Also selbst wenn es keine Probleme gäbe:<br />
mit</p>
<pre><code class="language-cpp">void * inhalt = new A[10];
</code></pre>
<p>wird nun speicher reserviert wie du auch sagtest, doch hier:</p>
<pre><code class="language-cpp">inhalt[0] = new A;
</code></pre>
<p>reservirst du wieder komplett neuen speicher und versuchst den Zeiger der auf diesen Speicher zeigt an die Stelle zu speichern wo eine Instanz dieser klasse hingehört.<br />
Da ganze funktioniert wenn du das so machst:</p>
<pre><code class="language-cpp">void * inhalt = new A[10];

((A*)inhalt)[0] = A();
</code></pre>
<p>Doch würde ich dir eher dazu raten, dann doch lieber mit Basisklassen zu arbeiten oder eine andere Möglichkeit zu finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668167</guid><dc:creator><![CDATA[Kahino]]></dc:creator><pubDate>Sun, 22 Feb 2009 16:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 16:24:53 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Titel_ schrieb:</p>
<blockquote>
<p>Und wenn du es ganz schön machen willst, dann nimm share Pointer oder ähnliches.</p>
</blockquote>
<p>Wieso ist das dann <em>ganz schön</em>?</p>
</blockquote>
<p>Kein Speicher von Hand freigeben -&gt; keine Memleaks, wenn ams nicht extrem dumm macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668168</guid><dc:creator><![CDATA[Titel_]]></dc:creator><pubDate>Sun, 22 Feb 2009 16:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 16:32:53 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>im konstruktor einer klasse möchte ich ein array von objektzeigern einer anderen klasse anlegen. ich kenne aber erst im konstruktor<br />
a) die anzahl der arrayelemente und<br />
b) die klasse, deren objektzeiger ich speichern will.</p>
</blockquote>
<p>Das klingt für mich perfekt nach einem Fall von Forward Declaration.</p>
<p><strong>Bar.hpp</strong></p>
<pre><code class="language-cpp">class Bar
{
  /* ... */
};
</code></pre>
<p><strong>Foo.hpp</strong></p>
<pre><code class="language-cpp">class Bar; // Forward declaration

class Foo
{
private:
  Bar* m_barArray;

public:
  Foo(unsigned int barCount);
};
</code></pre>
<p><strong>Foo.cpp</strong></p>
<pre><code class="language-cpp">#include &quot;Foo.hpp&quot;
#include &quot;Bar.hpp&quot;

Foo::Foo(unsigned int barCount)
{
  // Erst hier ist die Anzahl an Elementen bekannt,
  // sowie die Klasse Bar.
  m_barArray = new Bar[barCount];

  // Im Destruktor nicht vergessen, die Sache zu löschen.
  // Oder gleich einen std::vector nehmen.
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668173</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 22 Feb 2009 16:32:53 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 17:11:25 GMT]]></title><description><![CDATA[<p>ich habs jetzt so gemacht:</p>
<pre><code>int **inhalt;
</code></pre>
<p>dann zur laufzeit im konstruktor:</p>
<pre><code>inhalt=(int**)malloc(4*AnzahlElemente);  //nötigen gesamtspeicher für alle zeiger reservieren
for(i=0;i&lt;AnzahlElemente;i++) inhalt[i]=(int*)new A();
</code></pre>
<p>dann muss ich es nur noch irgentwie hinkriegen, durch casts auf die memberfunktionen von z.b. inhalt[3] zuzugreifen. also z.b.</p>
<p>inhalt[3]-&gt;machWas();</p>
<p>edit:</p>
<pre><code>A *z;
z=(A*)inhalt[3];

z-&gt;machWas()
</code></pre>
<p>leider kommt dann die meldung, das die memberfunktion &quot;inaccessable&quot; ist, obwohl public?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668198</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 17:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 17:15:06 GMT]]></title><description><![CDATA[<p>WTF?</p>
<p>Schau dir lieber Draveres Vorschlag an. So wird da nie was draus.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668210</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 22 Feb 2009 17:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 18:41:59 GMT]]></title><description><![CDATA[<p>wiso wtf? was ist an meinem code falsch?</p>
<p>das beispiel von Dravere geht bei mir nicht. er deklariert in seiner<br />
foo.hpp bereits das array vom typ Bar.</p>
<p>&quot;Bar* m_barArray;&quot;</p>
<p>aber dort weiss ich ja noch nicht, was für einen zeiger ich brauche. es könnte genausogut ein zeiger auf das objekt &quot;Auto&quot; sein.</p>
<p>ich kann nichts deklarieren -egal wo, dessen typ erst zur laufzeit klar ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668257</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 18:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 18:58:24 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>wiso wtf? was ist an meinem code falsch?</p>
</blockquote>
<p>Weil es ein äusserst hässliches rumgefrickel ist. Sowas hat man vielleicht in C gemacht, in C++ gibt es dazu andere Möglichkeiten.</p>
<p>Es gibt viele Möglichkeiten, von Basisklasse bis hin zu Templates. Aber das was du machst ist nicht nur hässlich, sondern sogar extrem Fehleranfällig.</p>
<p>Ich würde vorschlagen, dass du dein Problem etwas genauer erläuterst, ich bin mir sicher, wir finden eine deutlich bessere Lösung.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668273</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 22 Feb 2009 18:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 19:30:54 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>tenim schrieb:</p>
<blockquote>
<p>wiso wtf? was ist an meinem code falsch?</p>
</blockquote>
<p>Weil es ein äusserst hässliches rumgefrickel ist. Sowas hat man vielleicht in C gemacht, in C++ gibt es dazu andere Möglichkeiten.</p>
</blockquote>
<p>Nicht einmal. In C wäre das rein mit malloc gemacht worden und nicht auch noch mit new ebenfalls.. Ich möchte gar nicht wissen, wo und wie er das wieder freigibt.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668317</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 22 Feb 2009 19:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 19:43:28 GMT]]></title><description><![CDATA[<p>ich hab es jetzt schöner lösen können:</p>
<p>da meine mir bisher unbekannten klassen alle von einer basisklasse A erben, sind diese ja zuweisungskompatibel, wenn ich bei der vererbung &quot;public&quot; angebe(hatte ich vergessen bzw. bis jetzt nicht gewusst -komme von der java ecke).</p>
<p>so brauche ich mir jetzt keine sorgen mehr zu machen, ich kann im konstruktor<br />
einfach schreiben</p>
<p>inhalt **A;</p>
<p>und nach dem erzeugen der objekte B,C,D (welche ja von A erben), kann ich die objektreferenzen trotzdem zuweisen, weil halt zuweisungskompatibel.</p>
<p>inhalt[1]=new B();</p>
<p>hintergrund:<br />
ich schreibe einen raumschiffsimulator, der im perryversum angesiedelt ist. <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>es ging im detail darum, das ich eine basisklasse &quot;Energieerzeuger&quot; habe, von der alle &quot;echten&quot; energieerzeuger wie z.b. Fusionsreaktoren oder Schwarzschildgeneratoren abgeleitet sind. die klasse &quot;Energieerzeuger&quot; dient somit nur der bereitstellung von eigenschaften und methoden, die jeder echte<br />
&quot;Energieerzeuger&quot; hat. die beiden obengenannten &quot;Energieerzeuger&quot; sind aktive, also sie erzeugen selbst energie. ausserdem gibt es eine klasse kraftwerk, welches aus mehreren aktiven Energieerzeugern besteht und selbst passiv ist(weil es ja keine energie aus eigener kraft erzeugt). auch die klasse kraftwerk ist von der basisklasse &quot;Energieerzeuger&quot; abgeleitet, da diese auch diese eigenschaften hat.</p>
<p>jetzt das problem:<br />
erst zur laufzeit, also wenn bekannt ist was für ein raumschiff-modell gewählt wurde, kann ich anfangen, mehrere kraftwerk-objekte in dem schiff zu platzieren.<br />
dabei muss ich im konstruktor des kraftwerks natürlich angeben<br />
a) welcher typ von energieerzeuger verbaut werden soll und<br />
b) wieviele davon</p>
<p>ich habe allerdings schon im konstruktor des kraftwerks eine variable mit dem zukünftigen array von &quot;Energieerzeuger&quot;-objekten angelegt. das kann ich dann später durchiterieren, egal was für ein typ von kindobjekt darin gefunden wird.<br />
eben:</p>
<pre><code>Energieerzeuger  **pEnergieerzeuger;
</code></pre>
<p>dieses array muss ich dann</p>
<p>1. initialisieren:</p>
<pre><code>pEnergieerzeuger=(Energieerzeuger**)malloc(4*cAnzahl);
</code></pre>
<p>(da jeder zeiger 4 byte braucht(im 32bit system) reserviere ich 4*anzahl.)</p>
<p>2. objekte zuweisen:<br />
(eEt ist ein enum mit den typen der erzeuger, die anderen varianten hab ich noch nicht programmiert)</p>
<pre><code>for(i=0;i&lt;cAnzahl;i++)
	{
		switch (eEt)
		{
			case FusionsreaktorTerraTyp1:
				pEnergieerzeuger[i]=new Fusionsreaktor_Terra_Typ1(i+1);
				break;
		}
	}
</code></pre>
<p>3. nutzen des objektes</p>
<pre><code>pEnergieerzeuger[1]-&gt;fahreHoch();
</code></pre>
<p>scheint jetzt soweit alles zu klappen.<br />
<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>bin natürlich für elegantere lösungen dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668325</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 19:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 19:48:41 GMT]]></title><description><![CDATA[<p>hey mr. &quot;drakon&quot;</p>
<p>ich habs in meinem letzten post bereits mit malloc gemacht.<br />
deine überhebliche art kannst du dir sparen. du bist nicht der einzige, der programmieren kann. ich bin bestimmt kein c++ crack, aber ich machs ja erst seit 2 tagen i n c++.</p>
<p>p.s.</p>
<p>freigben tue ich das so:</p>
<p>free(pEnergieerzeuger);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668330</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 19:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 19:53:35 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>deine überhebliche art kannst du dir sparen. du bist nicht der einzige, der programmieren kann. ich bin bestimmt kein c++ crack, aber ich machs ja erst seit 2 tagen i n c++.</p>
</blockquote>
<p>Das hat mit Überheblichkeit nix zu tun.<br />
In C++ macht man solche Sachen mit new und delete, egal was du früher gemacht hast. Denn mit new und delete bist du auf der sicheren Seite. Insbesondere wenn deine Klassen mal komplexer werden, oder du die Strukturen verändern willst und dabei ein Objekt mal gerade nicht seine 4 Byte groß ist, dann geht das Gefrickel los. Nimm dir doch einfach die Zeit und lies ein Buch, bevor du dir aus deinem (C-)Hintergrund heraus schlechten Stil angewöhnst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668333</guid><dc:creator><![CDATA[franz]]></dc:creator><pubDate>Sun, 22 Feb 2009 19:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 20:03:18 GMT]]></title><description><![CDATA[<p>ok, aber ob ich es mit malloc oder new mache ist doch relativ egal da ich in beiden fällen darauf achten muss, die ressourcen manuell wieder freizugeben.<br />
wenn ich wegen der operandengrösse nicht sicher bin, kann ich ja sizeof() nehmen.</p>
<p>ich hab ja malloc nicht ohne triftigen gund angewandt. es ging darum, ein array von n objektreferenzen anzulegen, OHNE die objekte selbst alle auf einmal zu instanzieren. wenn du mir erklärst, wie ich das mit &quot;new&quot; hinkriege, bitte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668339</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 20:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 20:19:14 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>ich hab ja malloc nicht ohne triftigen gund angewandt. es ging darum, ein array von n objektreferenzen anzulegen, OHNE die objekte selbst alle auf einmal zu instanzieren. wenn du mir erklärst, wie ich das mit &quot;new&quot; hinkriege, bitte.</p>
</blockquote>
<p>Aber du hast ihn ja sofort danach zugewiesen. Da hättest du auch new nehmen können. Und da das ganze Anwendungscode ist, würde ich das auch in einen Smart Pointer packen. Dann hast du die volle flexibiltät und musst dir keine Sorgen um die Speicherverwaltung machen..</p>
<p>Und wenn es denn wirklich sein muss, dann würde ich auf vorgefertige Funktionalitäten zurückgreifen und mir einen anständigen Wrapper schreiben und nicht einfach drauflos programmieren..<br />
<a href="http://www.cplusplus.com/reference/std/memory/" rel="nofollow">http://www.cplusplus.com/reference/std/memory/</a><br />
<a href="http://www.cplusplus.com/reference/std/new/" rel="nofollow">http://www.cplusplus.com/reference/std/new/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668345</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 22 Feb 2009 20:19:14 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 20:22:49 GMT]]></title><description><![CDATA[<p>nein, ich erstell jede objektinstanz mit anderen parametern. deshalb kann ich nicht alles in einem rutsch machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668346</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 20:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 20:54:46 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>nein, ich erstell jede objektinstanz mit anderen parametern. deshalb kann ich nicht alles in einem rutsch machen.</p>
</blockquote>
<p>OK. Das sieht man aber in deinem Beispiel nicht..</p>
<p>Wie auch immer wäre das alleine für mich noch lange kein Grund malloc oder auch nur new zu benutzen. Ich würde vorher einen Standardcontainer nehmen und da die Elemente pushen und das kannst du für jedes Element andere Parameter übergeben.</p>
<p>Und wenn ich das aus irgendeinem Grund nicht machen kann/will, dann würde ich sogar vorher einfach die Elemente erzeugen (mit dem Standardkonstruktor) und dann über einen setter die Werte setzen.</p>
<p>Aber wenn du das <em>unbbedingt</em> mit malloc machen willst..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668363</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 22 Feb 2009 20:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 21:13:52 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>hey mr. &quot;drakon&quot;</p>
<p>ich habs in meinem letzten post bereits mit malloc gemacht.<br />
deine überhebliche art kannst du dir sparen. du bist nicht der einzige, der programmieren kann. ich bin bestimmt kein c++ crack, aber ich machs ja erst seit 2 tagen i n c++.</p>
</blockquote>
<p>Du scheinst ja nicht gerade sehr kritikfähig zu sein. Dravere und drakon haben völlig Recht mit ihren Einwänden.</p>
<p>Wenn du aus C kommst, kannst du innerhalb von 2 Tagen noch kein C++. Die Konzepte sind grundlegend anders, manuelle Speicherverwaltung kann auf ein Minimum reduziert werden. Das heisst, dass du meistens weder mit <code>malloc()</code> noch mit <code>new</code> hantieren musst, sondern fertige Container der STL anwenden kannst.</p>
<p>Dann hast du</p>
<pre><code class="language-cpp">std::vector&lt;MyClass&gt; Vec;
Vec.push_back(MyClass(25, &quot;x25-b77&quot;, true));
</code></pre>
<p>Das ist doch wohl schöner als jegliches Rumgefrickel mit <code>malloc()</code> .</p>
<ul>
<li>Wie willst du mit <code>malloc()</code> Konstruktoren aufrufen, ohne Placement New einzusetzen?</li>
<li>Was, wenn du plötzlich ein Element anhängen willst, und der Speicher nicht mehr reserviert ist?</li>
<li>Hast du Kopierkonstruktor und Zuweisungsoperatoren überladen oder wenigstens <code>private</code> gemacht?</li>
<li>Rufst du vor dem Freigeben mit <code>free()</code> die Destruktoren auf?</li>
<li>Hast du eine separate Variable für die Grösse des dynamischen Arrays, die auch ständig aktualisiert wird?</li>
<li>Wie willst du mit <code>malloc()</code> effizient debuggen? Bei den STL-Containern erhält man Assertions.</li>
<li>Was ist, wenn du plötzlich merkst, dass ein dynamisches Array doch nicht die richtige Datenstruktur ist und statt dessen eine verkettete Liste angebracht wäre?</li>
</ul>
<p>Alle diese Probleme hast du mit STL-Containern nicht. Zudem hast du damit sauberen, übersichtlichen und somit gut wartbaren Code. Die Fehleranfälligkeit und allfällige Memory Leaks fallen praktisch weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668378</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 22 Feb 2009 21:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 21:22:21 GMT]]></title><description><![CDATA[<p>nein, ich komme nicht unbedingt aus der c ecke. hab zwar in c einige zeit programmiert, aber mehr mit java(hab ich auch in einem posting geschrieben, liest halt keiner richtig).</p>
<p>und kritikfähig bin ich schon, das kannst du mir glauben. nur der ton macht die musik und es ist oft wichtiger, wie jemand etwas sangt, als was er sagt.<br />
und der umgangston war einfach unhöflich. das erkennen viele leute nicht, weil sie einfach zu tief in ihrer materie drin sind und darauf keinen wert legen.</p>
<p>ich allerdings schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668384</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Sun, 22 Feb 2009 21:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 21:25:56 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>nein, ich komme nicht unbedingt aus der c ecke. hab zwar in c einige zeit programmiert, aber mehr mit java(hab ich auch in einem posting geschrieben, liest halt keiner richtig).</p>
</blockquote>
<p>Hm, während des Threadverlaufs hatte ich irgendwie das Gefühl bekommen, du seist aus C. Wie auch immer, <code>malloc()</code> und <code>free()</code> sind C und haben bis auf einige Ausnahmen nichts in C++ zu suchen (nein, dein Fall ist keine solche Ausnahme).</p>
<p>tenim schrieb:</p>
<blockquote>
<p>und kritikfähig bin ich schon, das kannst du mir glauben. nur der ton macht die musik und es ist oft wichtiger, wie jemand etwas sangt, als was er sagt.<br />
und der umgangston war einfach unhöflich. das erkennen viele leute nicht, weil sie einfach zu tief in ihrer materie drin sind und darauf keinen wert legen.</p>
</blockquote>
<p>Es wird auch nicht gerade besonders geschätzt, wenn man als Fragesteller nicht auf die Antworten eingeht. Es wurden viele Vorschläge gebracht, aber du scheinst auf deiner Frickellösung zu beharren. Ich hab zum Beispiel in meinem letzten Post auch versucht, dir die Nachteile vom Rumgefrickel aufzuzeigen. Entweder du glaubst mir, oder ignorierst meinen Post weiterhin. Du musst ja schlussendlich wissen, wie du programmierst. Aber ich wünsche dir jetzt schon mal viel Spass beim Debuggen und Warten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668389</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 22 Feb 2009 21:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 21:39:04 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>und kritikfähig bin ich schon, das kannst du mir glauben. nur der ton macht die musik und es ist oft wichtiger, wie jemand etwas sangt, als was er sagt.<br />
und der umgangston war einfach unhöflich. das erkennen viele leute nicht, weil sie einfach zu tief in ihrer materie drin sind und darauf keinen wert legen.</p>
</blockquote>
<p>Wo war jemand unhöflich? - Ist es wegen meinem WTF? - Ich habe wahrscheinlich als einziger gesagt, was er gedacht hat, als er das Konstrukt gesehen hat. Es bringt dir nichts, wenn wir hier sagen: &quot;ja, mach mal.. das geht schon so..&quot;. Dann hast du irgendwann mal ein riesen Problem seie es, weil dein Programm aus &quot;unerklärlichen&quot; Gründen abstürtzt, oder weil dein Chef mal auf deinen Programmcode schaut. Und eines kann ich dir garantieren, wenn er so etwas sieht, dann wird er auch so etwas ähnliches, wie WTF sagen..</p>
<p>Vor allem als Anfänger sollte man sich mal auf die Standardbibliothek verlassen und sich nicht um Speicherverwaltun kümmern müssen. Das kannst du auch mal später noch machen, wenn du mehr Erfahrung hast..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668396</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 22 Feb 2009 21:39:04 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Sun, 22 Feb 2009 22:26:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/826">@tenim</a>,<br />
Also zuerst einmal zu <code>malloc</code> . Ich würde in C++ kein <code>malloc</code> benutzen, wenn du nicht ganz genau weisst, was du tust. <code>malloc</code> und <code>new</code> sind intern etwas anders.</p>
<p>Und zu deinem Problem:<br />
Ich würde einen EnergieerzeugerManager machen, welcher die Energieerzeuger lädt und verwaltet. Von jedem Energieerzeuger brauchst du ja nur eine Instanz, mehr nicht.<br />
In deinem Kraftwerk oder Schiff, machst du dann einfach einen <code>std::vector&lt;Energieerzeuger*&gt;</code> . Und dazu eine Funktion, wo du die Dinger hinzufügen kannst. Also nicht per Konstruktor oder so, das hat meiner Meinung im Konstruktor nichts zu suchen.<br />
Du holst dann beim Manager per ID oder Name den entsprechenden Energieerzeuger und übergibst diesen an das Kraftwerk oder Schiff.</p>
<p>Im übrigen, würde ich nicht für jeden Energieerzeuger eine eigene Klasse erstellen. Es wäre sinnvoller, wenn du das in den Attributen vom Energieerzeuger speicherst. So kannst du am Ende sogar extern ein XML/Config File zur Verfügung stellen, wo du dann ganz einfach Energieerzeuger ergänzen oder verändern kannst.</p>
<p>... nur so Ideen <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668423</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 22 Feb 2009 22:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Mon, 23 Feb 2009 07:57:14 GMT]]></title><description><![CDATA[<p>ok, danke für die mühe. ich schau mal, wie sich das macht mit std::vector.<br />
bin halt eher ein pragmatischer programmierer und sehe bisher die vorteile des vectors noch nicht, weil ich ihn halt noch nicht kenne.<br />
werd mich dann damit mal beschäftigen...</p>
<p>p.s. ich hab schon ein c++ buch, das ich teilweise nebenbei lese. es ist &quot;die c++ programmiersprache&quot; von stosstrupp <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> oder wie der heisst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668525</guid><dc:creator><![CDATA[tenim]]></dc:creator><pubDate>Mon, 23 Feb 2009 07:57:14 GMT</pubDate></item><item><title><![CDATA[Reply to zeigertyp zur laufzeit ändern? on Mon, 23 Feb 2009 08:02:02 GMT]]></title><description><![CDATA[<p>tenim schrieb:</p>
<blockquote>
<p>von stosstrupp <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Ohman das ist Top <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="😃"
    /> &quot;stosstrupp&quot; :D:D Nicht schlecht :p <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668528</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 23 Feb 2009 08:02:02 GMT</pubDate></item></channel></rss>