Doppelpunkt operatoren bei konstruktor
-
hi könnte mir jemand hier helfen?
wir sollen da die fehler im Programm festellten.. also es hat den code problemlos kompieleiert.. nur was stellen diese dopelpunkte bei B() zB dar?
#include <iostream> class B{ public: B() : x(new int[1000]) {} ~B() { delete[] x; } int * x; }; class Ab : public B{ public: Ab() : y(new int[1000]) {} ~Ab() { delete[] y; } int * y; }; int main () { for (int i=0; i<100000; ++i) for (int j=0; j<100000; ++j) for (int k=0; k<100000; ++k) { B *b= new Ab; delete b; } system("PAUSE"); return 0; }
-
Das ist die Initialisierungsliste. Damit kannst du Member einer Klasse initialisieren. Wenn du das im ctor machen würdest, wäre das bereits eine Zuweisung und keine Initialisierung mehr. (Das sieht man vor allem an const Membern).
-
drakon schrieb:
Wenn du das im ctor machen würdest, wäre das bereits eine Zuweisung und keine Initialisierung mehr.
Du meinst im Konstruktorrumpf, die Initialisierungsliste gehört zum Konstruktor.
Gewisse Member müssen in der Initialisierungsliste initialisiert werden. Dazu gehören neben konstanten Objekten und Referenzen auch Instanzen von Klassen, die keinen Standardkonstruktor oder keinen Zuweisungsoperator bereitstellen. Ausserdem ist es oft performanter, ein Objekt direkt zu initialisieren als es zuerst in seinen Default-Zustand zu versetzen und anschliessend wieder zu überschreiben.
-
hmm also ich meinte das hier: B() : x(new int[1000]) {}
aber iwie versteh ich da snicht ganz.. wozu braucvht man das denn?
-
Lies die letzten beiden Posts, dann weisst du es...