<?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 Objekt sauber erzeugen]]></title><description><![CDATA[<p>Moin,<br />
für meine 5. Prüfungskomponente im Abitur schreibe ich ein Programm, das einen Kursplan erstellen soll. Dabei habe ich eine Klasse (gekürzt):</p>
<pre><code>Kurse
{
private:
	int fach;     // 18 Faecher durch Nummern (0-17) dargestellt
	bool ist_lk;  // lk = Leistungskurs
public:
        Kurse();
	static int kurse_cnt;
	void Set_fach(int, bool);
};
int Kurse::kurse_cnt=0;
</code></pre>
<p>Die Methode:</p>
<blockquote>
<p>void Kurse::Set_fach(int fach_nummer, bool leistungskurs)<br />
{<br />
Kurse::kurse_cnt++;<br />
fach = fach_nummer;<br />
ist_lk = leistungskurs;<br />
}</p>
</blockquote>
<p>und möchte nun erstmal leere Kurse erstellen. Da nicht bekannt ist, wieviele Kurse es geben wird, brauche ich ein dynamisches Objekt der Klasse Kurse.?</p>
<pre><code>Kurse *kurse = new Kurse;
</code></pre>
<p>Ich glaube, dass ich jetzt einen Vektor &quot;kurse&quot; dynamischer Länge hab, stimmt das? Ich erstelle also zu Testzwecken erstmal 10 Kurse:</p>
<pre><code>kurse[Kurse::kurse_cnt].Set_fach(0, true);
kurse[Kurse::kurse_cnt].Set_fach(1, true);   // 1 wäre in dem Fall Deutsch
kurse[Kurse::kurse_cnt].Set_fach(2, true);   // 2 = Englisch
kurse[Kurse::kurse_cnt].Set_fach(5, true);   // 5 = Mathe
kurse[Kurse::kurse_cnt].Set_fach(6, true);   // alles Leistungskurse, daher true
kurse[Kurse::kurse_cnt].Set_fach(7, true);   // beim Aufrug von Set_fach -&gt;
kurse[Kurse::kurse_cnt].Set_fach(8, true);   // kurse_cnt +1
kurse[Kurse::kurse_cnt].Set_fach(9, true);
kurse[Kurse::kurse_cnt].Set_fach(10, true);
kurse[Kurse::kurse_cnt].Set_fach(11, true);
</code></pre>
<p>Ich finde es selbst absolut hässlich und kann mir nicht vorstellen, dass man das so löst, aber das ist das einzige, was ich zum Laufen bekommen habe. Jedoch sagt mir der Debugger bei über 8-maligem Aufruf von Set_fach, dass der Heap Allocator Overflow irgendwas und unterbricht mehrmals. Ohne Debugger läufts aber &quot;wunderbar&quot;. Wer wäre so nett, mich aufzuklären und mir zu zeigen, wie man hier ein dynamisches Objekt richtig erzeugt?<br />
Vielen Dank schonmal für jedwede Hilfe.<br />
Gruß, Julian</p>
<p>Ich nutze &quot;Microsoft Visual C++ 2010 Express&quot; unter Win7</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/298472/dynamisches-objekt-sauber-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 19:50:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298472.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 20 Jan 2012 18:41:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Fri, 20 Jan 2012 18:42:05 GMT]]></title><description><![CDATA[<p>Moin,<br />
für meine 5. Prüfungskomponente im Abitur schreibe ich ein Programm, das einen Kursplan erstellen soll. Dabei habe ich eine Klasse (gekürzt):</p>
<pre><code>Kurse
{
private:
	int fach;     // 18 Faecher durch Nummern (0-17) dargestellt
	bool ist_lk;  // lk = Leistungskurs
public:
        Kurse();
	static int kurse_cnt;
	void Set_fach(int, bool);
};
int Kurse::kurse_cnt=0;
</code></pre>
<p>Die Methode:</p>
<blockquote>
<p>void Kurse::Set_fach(int fach_nummer, bool leistungskurs)<br />
{<br />
Kurse::kurse_cnt++;<br />
fach = fach_nummer;<br />
ist_lk = leistungskurs;<br />
}</p>
</blockquote>
<p>und möchte nun erstmal leere Kurse erstellen. Da nicht bekannt ist, wieviele Kurse es geben wird, brauche ich ein dynamisches Objekt der Klasse Kurse.?</p>
<pre><code>Kurse *kurse = new Kurse;
</code></pre>
<p>Ich glaube, dass ich jetzt einen Vektor &quot;kurse&quot; dynamischer Länge hab, stimmt das? Ich erstelle also zu Testzwecken erstmal 10 Kurse:</p>
<pre><code>kurse[Kurse::kurse_cnt].Set_fach(0, true);
kurse[Kurse::kurse_cnt].Set_fach(1, true);   // 1 wäre in dem Fall Deutsch
kurse[Kurse::kurse_cnt].Set_fach(2, true);   // 2 = Englisch
kurse[Kurse::kurse_cnt].Set_fach(5, true);   // 5 = Mathe
kurse[Kurse::kurse_cnt].Set_fach(6, true);   // alles Leistungskurse, daher true
kurse[Kurse::kurse_cnt].Set_fach(7, true);   // beim Aufrug von Set_fach -&gt;
kurse[Kurse::kurse_cnt].Set_fach(8, true);   // kurse_cnt +1
kurse[Kurse::kurse_cnt].Set_fach(9, true);
kurse[Kurse::kurse_cnt].Set_fach(10, true);
kurse[Kurse::kurse_cnt].Set_fach(11, true);
</code></pre>
<p>Ich finde es selbst absolut hässlich und kann mir nicht vorstellen, dass man das so löst, aber das ist das einzige, was ich zum Laufen bekommen habe. Jedoch sagt mir der Debugger bei über 8-maligem Aufruf von Set_fach, dass der Heap Allocator Overflow irgendwas und unterbricht mehrmals. Ohne Debugger läufts aber &quot;wunderbar&quot;. Wer wäre so nett, mich aufzuklären und mir zu zeigen, wie man hier ein dynamisches Objekt richtig erzeugt?<br />
Vielen Dank schonmal für jedwede Hilfe.<br />
Gruß, Julian</p>
<p>Ich nutze &quot;Microsoft Visual C++ 2010 Express&quot; unter Win7</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170614</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Fri, 20 Jan 2012 18:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Fri, 20 Jan 2012 18:49:24 GMT]]></title><description><![CDATA[<p>Guck dir mal std::vector an. Damit könnte man es ungefähr so lösen:</p>
<pre><code class="language-cpp">class Kurs {
    // Methoden und Variablen der Klasse Kurs.
    // ...
};
</code></pre>
<p>Und der benutzende Code:</p>
<pre><code class="language-cpp">//Vector dynamischer Länge:
std::vector&lt;Kurs&gt; kurse;
//Neuen Kurs erstellen (mit Konstruktor)
kurse.push_back(Kurs(1) ); //1 entspricht Deutsch
kurse.push_back(Kurs(2) ); //2 entspricht English
//Auf den ersten Kurs zugreifen und das Fach ändern
kurse[0].Set_fach(5); //5 entspricht Mathe
// ...
</code></pre>
<p>Weitere Funktionen von std::vector findest du unter: <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/</a></p>
<p>pyhax</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170618</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Fri, 20 Jan 2012 18:49:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Fri, 20 Jan 2012 20:06:57 GMT]]></title><description><![CDATA[<p>Ja, scheint mir eleganter <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="🙂"
    /> danke dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170633</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Fri, 20 Jan 2012 20:06:57 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Fri, 20 Jan 2012 20:14:10 GMT]]></title><description><![CDATA[<p>Übrigens, dein erster Versuch wäre falsch gewesen, nur so als Hinweis :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170635</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Fri, 20 Jan 2012 20:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 01:33:33 GMT]]></title><description><![CDATA[<p>Dacht ich mir.<br />
Eventuell unabhängig davon, aber im Zuge der Arbeiten mit std::vector sagt mir der Debugger:</p>
<blockquote>
<p>Eine Ausnahme (erste Chance) bei 0x7770dcbb in planer.exe: 0xC0000374: Ein Heap wurde beschädigt.<br />
Unbehandelte Ausnahme bei 0x7770dcbb in planer.exe: 0xC0000374: Ein Heap wurde beschädigt.</p>
</blockquote>
<p>Leider ohne Zeilenangabe o.ä. Was bedeutet das &quot;Ein Heap wurde beschädigt&quot;?</p>
<p>Gruß, Julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170711</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Sat, 21 Jan 2012 01:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 08:16:39 GMT]]></title><description><![CDATA[<p>mit</p>
<pre><code class="language-cpp">Kurse *kurse = new Kurse;
</code></pre>
<p>hast du einmal Speicher angefordert, wo einmla Kurse reinpasst. Möchtest mehrere Kurse, z.B. müsst das tun</p>
<pre><code class="language-cpp">Kurse *kurse = new Kurse [10];

// allgemeiner
Kurse *kurse = new Kurse [irgende anzahl];
</code></pre>
<p>Jetzt hast du Platz für 10 Kurse.<br />
Dynamisch ist das in dem Sinne das zur Laufzeit entscheiden kannst wie groß dein Kurse Array ist. Einmal allociert allerdings ist die Größe fest, und erweitert sich nicht automatisch, falls du dich danach entscheidest mehr Kurse zu speichern</p>
<p>freigeben tust du den Speicher mit</p>
<pre><code class="language-cpp">delete [] kurse
</code></pre>
<p>die Anzahl brauchst du hier nich angeben.</p>
<p>So nachdem man ihm das erklärt hat, kann man jetz sagen.</p>
<p>Schau dir mal lieber std::vector an !</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170721</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Sat, 21 Jan 2012 08:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 09:57:16 GMT]]></title><description><![CDATA[<p>Hast du jetzt immer noch irgendwo ein &quot;new&quot; im Code? Solltest du eigentlich mit std::vector nicht mehr brauchen. Zeig mal deinen Code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170743</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Sat, 21 Jan 2012 09:57:16 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 11:34:49 GMT]]></title><description><![CDATA[<p>shizzophate schrieb:</p>
<blockquote>
<p>Eventuell unabhängig davon, aber im Zuge der Arbeiten mit std::vector sagt mir der Debugger:</p>
<blockquote>
<p>Eine Ausnahme (erste Chance) bei 0x7770dcbb in planer.exe: 0xC0000374: Ein Heap wurde beschädigt.<br />
Unbehandelte Ausnahme bei 0x7770dcbb in planer.exe: 0xC0000374: Ein Heap wurde beschädigt.</p>
</blockquote>
<p>Leider ohne Zeilenangabe o.ä. Was bedeutet das &quot;Ein Heap wurde beschädigt&quot;?</p>
</blockquote>
<p>Du hast wahrscheinlich irgendwelche Speicherstellen modifiziert, die Dir gar nicht gehörten, und damit scheinbar Datenstrukturen zerstört, die für die Verwaltung des Freispeichers verwendet wird. Demjenigen, der den Speicher verwaltet ist dies aufgefallen und hat dafür gesorgt, dass das Programm terminiert wird. Du hast quasi noch Glück gehabt, dass Dein Computer nicht explodiert ist! <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>Tipp1: Verwende Datenstrukturen aus der Standardbibliothek, sofern möglich.<br />
Tipp2: Verwende den Debug-Modus dieser Bibliothek, um Fehler früher erkennen zu können (siehe dazu in der Dokumnetation Deines Compilers nach).</p>
<p>C und C++ ist nunmal kein &quot;Baby-Spielzeug&quot;. Es ist spitz und man kann sich damit das Auge ausstechen, wenn man nicht weiß, was man da tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170759</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 21 Jan 2012 11:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 11:44:40 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Du hast quasi noch Glück gehabt, dass Dein Computer nicht explodiert ist! <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>Vorsicht mit solchen Scherzen, nachher glaubt das noch jemand. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2170763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170763</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 21 Jan 2012 11:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 15:28:51 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Erklärungen. Das deckt sich mit dem, was ich heute Nacht noch zu den Themen &quot;Heap&quot; und &quot;dynamische Objekte&quot; gelesen habe, obwohl ich das Problem des beschädigten Heaps nicht wirklich greifen kann - dazu fehlt mir ein ganzes Stück Theorie/Wissen, aber ich sehe ein, dass der Fehler an mir liegt <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>Neben der Klasse &quot;Kurse&quot; habe ich noch 2 weitere Klassen &quot;Schueler&quot; und &quot;Lehrer&quot;. Da ich jetzt weiß, dass ich dynamische Objekte dann verwende, wenn die Größe selbigen Objekts erst zur Laufzeit feststeht, erzeuge ich also zur Laufzeit so viele &quot;Schueler&quot; und &quot;Lehrer&quot;, wie Eintraege im jeweiligen Verzeichnis sind:</p>
<pre><code class="language-cpp">Schueler *schueler = new Schueler[EintraegeCnt(&quot;datenbank\\schueler\\*.sch&quot;)];
Lehrer *lehrer = new Lehrer[EintraegeCnt(&quot;datenbank\\lehrer\\*.leh&quot;)];
</code></pre>
<p>Mutet auch etwas improvisiert an, funktioniert aber.<br />
Jetzt gilt es für mich, einen Algorithmus zu finden, der nach und nach alle Schueler abarbeitet und in Kurse &quot;steckt&quot; und danach den Kursen Lehrer zuordnet.<br />
Die Anzahl der Kurse ist vorerst unbekannt, ABER:<br />
ich kann ähnlich wie mit den Schülern und Lehrern eine Funktion schreiben, die kurz checkt, wieviele Schüler welches Fach gewählt haben und als return-Wert die sich daraus ergebende Anzahl an Kursen zurückgeben um damit ebenfalls ein dynamisches Objekt der Art</p>
<pre><code class="language-cpp">Kurse *kurse = new Kurse[ZaehleKurse(schueler)];  // alle schueler übergeben
</code></pre>
<p>zu erzeugen.<br />
Hab's auch probiert:</p>
<pre><code class="language-cpp">int ZaehleKurse(Schueler[]);  // Prototyp
int ZaehleKurse(Schueler schueler[])
{   // &lt;-- Hier zeigt der Debugger hin und meckert
    int cnt=0, kursNr, kurse[19];  
    // [...] die Anzahl der Kurse wird ermittelt   
    return cnt; 
}
</code></pre>
<p>wenn ich zu Testzwecken die Funktion erstmal so aufrufe, bekomme ich als Return-Wert auch tatsächlich die korrekte Anzahl an Kursen, jedoch eben mit Unterbrechung durch den Debugger. Es kommt kein Fehler, keine &quot;Heap-Beschädigung&quot; - nur eine &quot;Aufrufliste&quot;, wo er auf die obige Zeile zeigt und mir aus der &quot;crtexec.c&quot; die Stelle zeigt:</p>
<pre><code class="language-cpp">__initenv = envp;
mainret = main(argc, argv, envp);
</code></pre>
<p>Mache ich irgendwas falsch? Darf man dynamische Objekte nicht einfach so als Parameter übergeben?<br />
Oder würdet ihr mir, auch wenn ich berechnen kann, wieviele Kurse/Lehrer/Schüler es zur Laufzeit gibt, trotzdem zu vectoren raten?</p>
<p>Danke für die hilfreichen Tips nochmal <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="👍"
    /> , Julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170827</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Sat, 21 Jan 2012 15:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 16:35:46 GMT]]></title><description><![CDATA[<p>Woher weiß denn deine &quot;ZaehleKurse&quot; Funktion überhaupt wie viele Schüler es gibt?<br />
Und std::vector&lt;Schueler&gt;/std::vector&lt;Lehrer&gt; wäre immer noch schöner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170844</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 21 Jan 2012 16:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 16:55:15 GMT]]></title><description><![CDATA[<p>Allerdings kannst du dann den std::vector so erstellen:</p>
<pre><code class="language-cpp">std::vector&lt;Schueller&gt; schueller(EintraegeCnt(&quot;datenbank\\schueler\\*.sch&quot;) );
</code></pre>
<p>Dadurch macht der Vektor eigentlich genau das selbe was du machst, mit dem Unterschied das er einfacher zu handhaben ist und sich auch noch nachträglich vergrößern kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170849</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Sat, 21 Jan 2012 16:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 17:03:17 GMT]]></title><description><![CDATA[<p>Wieviele Schüler es gibt wissen alle:</p>
<pre><code class="language-cpp">class Schueler						
{
public:
	Schueler();							
	static int schueler_cnt;
};
int Schueler::schueler_cnt=0;

Schueler::Schueler()
{				
	id = schueler_cnt;							
	Schueler::schueler_cnt++;
}
</code></pre>
<p>mit &quot;Schueler::schueler_cnt&quot;<br />
Der ganze Code ist natürlich etwas länger, aber bevor ich meinen ganzen code rechtfertigen muss, habe ich nur die wesentlichen Teile kopiert. Die Sachen funktionieren im Grunde ja auch und für 2 Jahre Grundkurs Informatik (ein bisschen rumscripten mit python) können die Prüfer von mir bei weitem nicht das erwarten, was ein erfahrener Programmierer schreiben würde.</p>
<p>Ich würde aber gerne wissen, warum es &quot;schöner&quot; ist, std::vector&lt;&gt; zu verwenden. Welche Vorteile haben sie gegenüber meinem dynamischen Objekt in meinem konkreten Fall (bevor ich jetzt einfach wieder ins kalte Wasser springe)?</p>
<p>Das Problem vom Debugger bleibt...<br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170850</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Sat, 21 Jan 2012 17:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 17:11:29 GMT]]></title><description><![CDATA[<p>shizzophate schrieb:</p>
<blockquote>
<p>Ich würde aber gerne wissen, warum es &quot;schöner&quot; ist, std::vector&lt;&gt; zu verwenden. Welche Vorteile haben sie gegenüber meinem dynamischen Objekt in meinem konkreten Fall</p>
</blockquote>
<p>Das Prinzip von RAII ist eigentlich, dass du keine Speicheranforderungen außerhalb von Klassen hast. Das bedeutet, dass die unterste &quot;Instanz&quot; immer auf dem Stack liegt, und das wiederrum bedeutet, dass deren Destruktor am Ende des Gültigkeitsbereichs sicher aufgerufen wird. Kurzum: Der vector garantiert dir ein sicheres delete[]. Zudem Methoden wie .resize() und .push_back().</p>
<p>Zu der statischen Schüleranzahl: Schlechte Idee. Abgesehen davon, dass du im Destruktor die Schüleranzahl wieder verringern solltest, sind statische Variablen an sich nicht so schön. Warum sollte ein Schüler von den anderen wissen? Nein. Wenn du Pointer verwenden würdest, würdest du so vorgehen:</p>
<pre><code class="language-cpp">void foo(Schueler* schueler, unsigned anzahl); // oder std::size_t statt unsigned
</code></pre>
<p>Mit Arrays so:</p>
<pre><code class="language-cpp">template&lt;unsigned N&gt;
void foo(Schueler (&amp;)schueler[N]); // Zugegeben, das ist etwas fortgeschrittener
</code></pre>
<p>Aber optimalerweise nutzt du einfach einen Vektor:</p>
<pre><code class="language-cpp">void foo(std::vector&lt;Schueler&gt;&amp; schueler); // schueler.size() verrät die Größe
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2170855</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170855</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 21 Jan 2012 17:11:29 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 17:32:38 GMT]]></title><description><![CDATA[<p>Danke! Habe also statt dynamischen Objekten jetzt std::vector&lt;&gt;<br />
Will ich jetzt starten, gehts nicht weil:</p>
<blockquote>
<p>LINK : fatal error LNK1104: Datei &quot;C:\Users\Shizzophate\Documents\Visual Studio 2010\Projects\planer\Debug\planer.exe&quot; kann nicht geöffnet werden.<br />
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========</p>
</blockquote>
<p>Wieso denn jetzt der Linker?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170864</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Sat, 21 Jan 2012 17:32:38 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamisches Objekt sauber erzeugen on Sat, 21 Jan 2012 17:40:31 GMT]]></title><description><![CDATA[<p>Ah, das lag an meiner geistigen Behinderung. Hatte das Programm noch offen <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="😃"
    /><br />
Prima, dann bin ich ja die statischen Dinger auch los.</p>
<p>Vielen Dank für die Hilfe nochmal an euch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2170868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2170868</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Sat, 21 Jan 2012 17:40:31 GMT</pubDate></item></channel></rss>