dynamisches Array von Objekten



  • Hi everyone

    Ich möchte einmalig zur laufzeit ein dynamisches Array definieren. Für gewöhnlich verwende ich dazu malloc und realloc und packe alle Initialisierungsvorgänge in eine Initialisierungsfunmktion ("init()"), welche lediglich vom Konstruktor aufgerufen wird.

    Da mit malloc und realloc kein Konstruktor aufgerufen wird, muss ich nach einer dynamischen Alloziierung lediglich noch init() für alle Objekte aufrufen et voilà 🙂 .

    Jetzt meine Frage: Ich muss das Array nicht wirklich dynamisch haben, sondern einmalig mit einem variablen Wert (je nach Setting in der ini-Datei) instantiieren. Danach bleibt die Grösse konstant.

    Wenn ich nun das Array wie folgt generiere:

    CSerialPort *spMainArray = new CSerialPort[iElNo];
    

    Ist mein Array dann genau "iElNo" Einträge gross 🙂 ?

    Ich hatte nämlich schon Compiler, welche bei Arrays mit Variablen einfach 255 oder so eingefügt haben, wenn man nicht mit malloc() gearbeitet hat.

    Ist obiger Code also nach Ansi-C korrekt 😃 ?

    Thx und greeetz
    Kessi



  • KessiMC schrieb:

    Wenn ich nun das Array wie folgt generiere:

    CSerialPort *spMainArray = new CSerialPort[iElNo];
    

    Ist mein Array dann genau "iElNo" Einträge gross 🙂 ?

    Ja, wenn ich mal davon ausgehe, dass iElNo ein ganzzahliger Wert ist.

    Ist obiger Code also nach Ansi-C korrekt 😃 ?

    Nein. Aber nach ISO C++.



  • Hallo

    Ist obiger Code also nach Ansi-C korrekt 😃 ?

    Nein, natürlich nicht.
    Sondern nach Ansi-C++

    Ich hatte nämlich schon Compiler, welche bei Arrays mit Variablen einfach 255 oder so eingefügt haben, wenn man nicht mit malloc() gearbeitet hat.

    Wenn das wirklich so ist, dann war das ein schlechter Compiler. Mit aktuellen Compilern darf sowas nicht passieren.

    Und in C++ solltest du auch anstatt malloc/free immer new/delete verwenden.
    Wenn du realloc bräuchstest, dann solltest du stattdessen gleich std::vector o.ä. verwenden.

    bis bald
    akari



  • Nein. Aber nach ISO C++.

    lol, naja, soll mir Recht sein 😛 .

    std::vector? Kenn' ich nicht 😕 ... Wie soll mir die bei dynamischen Arrays helfen?

    Thx 'n greeetz
    Kessi



  • std::vector _ist_ im Grunde ein dynamischer Array :). Du kannst nach Belieben zur Laufzeit Elemente rein und wieder raus tun, die Speicherverwaltung übernimmt der Vector für dich. Ist aber in deinem Fall unnötig, weil du ja den Array nur einmal initialisieren möchtest und die Größe danach nicht mehr ändern.



  • Aha, dann sollte ich mir die Klasse für künftige Programme aber schon 'mal vormerken.

    Ich sag's ja immer, in diesem Forum kann man noch richtig was lernen 👍 .

    Weiter so 😉 !

    Thx @all und greeetz
    Kessi


Anmelden zum Antworten