kostenloser Webspace werbefrei: lima-city


Dynamische Speicherreservierung - Array von Pointer auf Objekt

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    klasset

    klasset hat kostenlosen Webspace.

    So ich stehe nun schon längere Zeit vor einem Problem und weiss nicht so recht wie es zu lösen ist...

    Ich habe ein Array, welches mehrer Objekte enthalten soll, diese sollen dynamisch erweitert werden können. Da ich jedoch nicht immer das ganze Objekt kopieren möchte, wäre es viel praktischer, wenn ich ein Array von Pointer habe, welche auf die Objekte zeigen. Wenn ich jetzt ein neues Objekt möchte, dann kopiere ich die Einträge des Array, lösche dieses und erstellen ein neues, welches um eins grösser ist, und kopiere die Adressen der Objekte wieder zurück.
    Nun ist meine Frage wie macht man das in C++, bzw. gibt es Alternativen mit der STL?
    Noch als Hinweis, ich muss direkt auf das Objekt zugreifen können, also kommen Listen nicht in frage.

    Hier noch eine Grafik zum verdeutlichen:
    http://my-gate.net/public/array.png

    Danke im voraus für jede Hilfestellung!

    mfg Lukas
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. STL Vector

    Google gibt dazu sehr viele und (teils) sehr gute Tutorials aus. Es ist auch nicht sonderlich kompliziert.
    Du dürftest keine Probleme damit haben.

    Die Elemente können per Iterationen und direktem Zugriff ausgelesen werden usw. usf.

    Wie gesagt: Google gibt dir alles was du brauchst und mit Den STL Vectoren kann man - meiner Erfahrung nach - sehr gut arbeiten.
  4. Autor dieses Themas

    klasset

    klasset hat kostenlosen Webspace.

    STL Vector

    Danke für die Hilfe.

    Ja, Vectors kenne ich auch wie sie funktionieren usw. jedoch bleibt immer noch die Frage der deklaration...
    Das ist ja auch eigentlich mein Hauptproblem.

    Ist das so korrekt?

    vector<*CObject> objects;
    CObject temp = new CObject;
    objects.push_back(temp);

    Oder sollte das anderes angegangen werden?

    mfg Lukas

    Beitrag zuletzt geändert: 29.12.2009 15:02:07 von klasset
  5. vector <CObject*> objects;
    vector <CObject*>::iterator objectsIt;
    
    // Die Adresse von einem neuen CObject zum Vektor hinzufügen
    objects.push_back(new CObject);
    objects.push_back(new CObject);
    
    // Alle Objekte durchgehen und löschen
    for (objectsIt = objects.begin(); objectsIt != objects.end(); objectsIt++)
    {
        // Der belegte Speicher von den Objekten muss irgendwo wieder freigegeben 
        // werden
        delete *objectsIt;
    
        // Pointer sicherheitshalber auf 0 setzen, Grund ist klar!
        *objectsIt = 0;
    }
    // Vektor säubern
    objects.clear();

    Den Clean Up solltest du niemals vergessen! Sonst kann es zu Speicherlecks kommen.
    Die Adresse von einem temporären Objekt kannst du so ermitteln:
    CObject tempObject;
    CObject *tempObjectAddress = &tempObject;

    Natürlich auch nicht vergessen:
    #include <vector>
    
    using namespace std;


    Grüße
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!