Konstruktor mit new?
-
Hallo!
Ich habe grade Code gefunden und frage mich, ob das Anlegen von Konstruktoren anch dem Schema...
class B { public: B() : x(new int [1000]) {} ~B() { delete [] x; } int * x; };...so geht?
Ich kenne new/delete noch nicht so lange und bin daher unsicher.
Vor allem verstehe ich den Doppelpunkt im Konstruktor nicht, die Syntax ist mir schleierhaft.Ich brauche nur eine kurze Erklärung, wie der Konstruktor hier funktioniert.
-
Ich verstehe deine Frage nicht wirklich. Warum sollte hier etwas nicht gehen?
Wenn man mal davon absieht das die Klasse B zu Zugriffsverletzungen führen wird (Diese Klasse benötigt noch einen Kopierkonstruktor und Zuweisungsoperator). Sobald man einen eigenen Konstruktor schreibt, ist die Wahrscheinlichkeit recht hoch, das die Anderen beiden ebenso selbst geschrieben werden müssen (Bei manueller Speicherverwaltung mit new/delete und normalen Zeigern gilt dies immer).
Der Doppelpunkt wiederum beginnt die Initialisierungsliste. Du musst bei einen Konstruktor zwischen der Initialisierungsliste und den Konstruktorrumpf unterscheiden. In der Initialisierungsliste finden Initialisierungen statt, im Konstruktorrumpf existieren die Member bereits, und es ist nur noch eine Zuweisung möglich. Die Initialisierungsliste ist dem Konstruktorrumpf vorzuziehen, zudem benötigst du diese bei der Initialisierung von Konstanten, Referenzen, sowie dem Aufruf eines alternativen Konstruktors der Basisklasse.
-
Vielen Dank, das hilft schon weiter.
Der Code kommt aus einer Aufgabe, in der Fehler zu korrigieren sind. Jetzt weiß ich, dass ich wohl etwas anderes korrigieren muss.
Gelernt hab ich trotzdem was, Danke! (Der Doppelpunkt..)
Und vielleicht ist der fehlende Copykonstruktor/Zuweisungsoperator ja auch der Fehler, kann sein dass die Übungsleiter das meinten.Danke!