unterschiede bei instanziierung
-
nehmen wir mal an ich hab irgendeine klasse A mit default konstruktor.
es gibt nun 5 möglichkeiten, wie ich davon ne instanz erzeugen kann:
1. A a;
2. A b();
3. A c = A();
4. A *d = new A;
5. A *e = new A();
was genau sind dabei die unterschiede, gibs überhaupt welche? (mal davon abgesehen, dass 4. und 5. pointer sind und mir das objekt auf den heap legen)
-
Hallo
Varianten 1 bis 3 haben desselben Effekt, genauso wie Varianten 4 und 5.
Solange du nur den parameterlosen Konstruktor verwendest.bis bald
akari
-
akari schrieb:
Hallo
Varianten 1 bis 3 haben desselben Effekt, genauso wie Varianten 4 und 5.
Solange du nur den parameterlosen Konstruktor verwendest.bis bald
akariNicht ganz. Nr 2 ist eine Funktions Deklaration

BR
evilissimo
-
1. A a;
Konstruiert ein A per Default-Konstruktor2. A b();
Ist kein Konstruktor-Aufruf sondern definiert eine Funktion b, die keine Argumente hat und ein A zurückgibt.3. A c = A();
oder
A c = ...;
Konstruktion über Copy-Initialisierung...
6. A f( ...);
Konstruktion über direkte IntialisierungDer Unterschied zwischen 3 und 6 hängt mit expliziten Konstruktoren und Überladungsauflösung zusammen. Damit solltest du dich also mal befassen.
-
Ach ja, um das ganze noch zu vervollständigen:
Hat man einen POD-Typen z.b. int macht es einen Unterschied ob man
int i;oder
int i = int();schreibt, das gleiche gilt für objekte die man auf dem heap erzeugt hat:
int * i = new int;oder
int * i = new int();bei
int i; int * j = new int;werden die variablen nicht initialisiert
aber bei
int i = int(); int * j = new int();schon.
BR
evilissimo