Gute Pointer-Array Lösung gesucht



  • Ziel ist es alle vom Programm benötigten Daten in einer Klasse Datenbank zu halten:

    class Database
    {
     std::vector<Person> PersonenArray;
     std::vector<Firma>  FirmenArray;
    
     ...
     ...
    };
    

    Nun sollen verschiedene andere Klassen auf die Objekte in der Datenbank zugreifen und diese verändern können. Um nicht bei jeder Firma das gesamte PersonenArray durchsuchen zu müssen soll die Klasse Firma aber ein Pointer-Array auf die Personen welche in der jeweiligen Firma angestellt sind.

    class Firma
    {
     std::string Name;
     std::vector<Person*> ListederAngestellten;
     ...
    };
    

    So ganz einfach ist das aber nicht, Pointer auf ein Vektor-Eintrag sind bekanntlich nur bis zum nächsten push_back() gültig. Und die Daten in der Datenbank bereits als Pointer zu speichern birgt dann enormen new / delete - Einsatz auch einige Gefahren (und macht damit die Vorteile die std::vector bringt wieder zunichte). Gibt es eine gute Container-Bibliothek welche die Objekte nicht immer wieder neu verschiebt? oder kennt jemand eine Lösung wie man das ein wenig geschickter lösen kann? Die Daten sollten wenn möglich immer nur in der Datenbank-Klasse selbst sein, andere Klassen sollten mit Referenzen arbeiten.



  • std::list , aber für sowas würde ich eine richtige Datenbank benutzen.



  • Mit std::list funktioniert es tatsächlich... 😮

    Naja, manchmal sucht man viel zu weit...

    Die Frage nach einer richtigen Datenbank habe ich mir auch schon gestellt, wäre aber doch ein bisschen viel overhead, vorallem wenn es mit std::list auch funktioniert.



  • Nur so als Idee:

    Direkten Zugriff auf Objekte nur über Database; Database ist führendes System und verantwortlich für die einzelnen Objekte.

    Objekte haben eine ObjektID und werden nur über diese referenziert.

    Firma hat eine Liste von ObjektIDs, welche darüber Personen referenziert.

    Wenn in Database eine Person gelöscht wird, hat die Firma ggf. eine ObjektID, welche in Database nicht mehr gefunden wird; so was ist einfacher zu händeln.

    Gruß Helmut


Anmelden zum Antworten