Pointer-Array als Member einer Klasse



  • Hallo!

    Sicherlich wird diese Frage häufig gestellt, ich habe aber leider keinen passenden Beitrag gefunden:

    Ich möchte als Member einer Klasse ein Array haben, das aus Pointern auf Objekte einer anderen Klasse besteht. Nun möchte ich aber die Länge bei der Deklaration noch nicht angeben, sondern erst im Konstruktor das Array anhand eines Parameter mit einer bestimmen Länge erzeugen. Wie lautet dafür die richtige Syntax?

    Hier mal beispielhaft, was ich mir vorstelle:

    class A{
    private:
      B** b_array;
    public:
      A(int size);
    };
    
    A::A(int size){
      b = new b*[size]; //so in etwa, nur halt richtig ^^
    }
    

    Liebe Grüße,
    Lenzoi



  • Hallo

    b = new (B*)[size];
    

    Und du must das natürlich mit delete[] auch wieder löschen (Von den Instanzen hinter den Pointern ganz zu schweigen).

    Aber du solltest besser std::vector nehmen (siehe Magazin in diesem Forum, die Artikel über die STL).

    bis bald
    akari



  • Danke für die Antwort! Ich hab's temporär mit einem Vector gelöscht, aber da ich öfter auf Elemente in der Mitte zugreifen muss bzw. andere Werte zuweise dachte ich mir, dass ein Array effizienter ist.

    LG,
    Lenzoi



  • Nein, die Zugriffe in einen vector sind (fast) genauso schnell wie bei einem blanken Array. (was langsam sein könnte ist das Einfügen von neuen Daten irgendwo in der Mitte - aber da hast du mit einem Array noch stärker zu kämpfen)


Log in to reply