Anfängerfrage zu new



  • Ich benötige für ein Programm ein Feld, das 10 Instanzen einer eigenen KLasse beinhaltet.

    // Das klappt ja ganz gut
    int *feld = new int[10];
    for(int i=0;i<10; i++)
      feld[i] = i;
    
    // Was passiert hier? Wird der Standardkonstruktor aufgerufen, oder muss ich selbst initialisieren
    
    class A {irgendwas};
    
    A *f = new A[10];
    
    //Kann ich jetzt schon auf a[x] zugreifen?
    //Und falls nicht, wie weise ich dann korrekt das Ergebnis des Standardkstr zu?
    

    Bisher erhalte ich std::bad_alloc Fehler.



  • Ja, der Standardkonstruktor wird aufgerufen. Aber warum brauchst du new? Reichen Arrays nicht?

    struct A {};
    a[10];
    


  • silverling schrieb:

    Bisher erhalte ich std::bad_alloc Fehler.

    Mhh, also bei mir läuft dein Beispielprogramm (ausführbar gemacht) fehlerfrei (bis aufs Memory leak, nimm wie Cooky gesagt hat lieber ein Array (oder nen std::Vector)) durch:

    class A {};
    int main() {
    	int *feld = new int[10];
    	for(int i=0;i<10; i++)
    		feld[i] = i;
    	A *f = new A[10];
    }
    

    Vielleicht liegt das Problem in deiner A-Klasse. 😉
    Mach mal ein compilierbares Minimalbeispiel draus, dass den Fehler auch tatsächlich erzeugt.



  • cooky451 schrieb:

    Ja, der Standardkonstruktor wird aufgerufen. Aber warum brauchst du new? Reichen Arrays nicht?

    struct A {};
    a[10];
    

    Wenn er std::bad_alloc bekommt, dann wird in A wahrscheinlich irgendwas ordentlich groß sein. Mit einem normalen Array wird er daher vermutlich nicht gerade glücklich werden.



  • Ich fragte ja nur, ob er einen guten Grund hat. Zu groß für den Stack wäre einer.


  • Mod

    cooky451 schrieb:

    Ich fragte ja nur, ob er einen guten Grund hat. Zu groß für den Stack wäre einer.

    Egal welchen Grund er für new[] hat, der Grund gilt dann automatisch auch für vector. Und der ist einfach besser.


Anmelden zum Antworten