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