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
    akari

    Nicht ganz. Nr 2 ist eine Funktions Deklaration 😉

    BR
    evilissimo



  • 1. A a;
    Konstruiert ein A per Default-Konstruktor

    2. 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 Intialisierung

    Der 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


Anmelden zum Antworten