statischer Vektor (bad_alloc) kein delete?



  • My Class
    {
    public:
        bool addMyClass(MyClass *);
    
    private:
        static vector<MyClass *> pMyClassVektor;
    };
    
    vector<MyClass *> MyClass::pMyClassVektor(0);
    
    bool MyClass::addMyClass(MyClass * myClass)
    { 
        bool geklappt = false;
    
        if (!vergleicheMyClassId(myClass))
        {
            try
            {
                pMyClassVektor.push_back(myClass);
                geklappt = true;
            }
            catch (bad_alloc)
            {
                cout << "Kein Speicher mehr fuer pMyClassVektor\n";
            }
        }
        return geklappt;
    }
    

    Annahme:
    statischer Vektor erfordert vorher festgelegte Groesse
    diese kann allerdings mit push_back(), erase() und
    insert() verändert werden.
    Das kann dann allerdings einen bad_alloc auslösen.
    Frage: Ist das so richtig?

    Außerdem: An welcher Stelle muss ich ein delete auf pMyClassVektor absetzen?
    Im Destruktor kann ich das ja wohl kaum machen, da dieser ja bei jeder Instanz aufgerufen wird. Er müßte also erst beim löschen der letzten Instanz dieser Klasse ein solches delete aufgerufen werden!!??

    Naja, hoffe ihr versteht mich 😕

    MfG



  • blueheart schrieb:

    Annahme:
    statischer Vektor erfordert vorher festgelegte Groesse
    diese kann allerdings mit push_back(), erase() und
    insert() verändert werden.
    Das kann dann allerdings einen bad_alloc auslösen.
    Frage: Ist das so richtig?

    Ja, das ist richtig (allerdings mußt du schon sehr verschwenderisch mit deinem Speicher umgehen, ehe es zu Problemen kommt).

    Außerdem: An welcher Stelle muss ich ein delete auf pMyClassVektor absetzen?
    Im Destruktor kann ich das ja wohl kaum machen, da dieser ja bei jeder Instanz aufgerufen wird. Er müßte also erst beim löschen der letzten Instanz dieser Klasse ein solches delete aufgerufen werden!!??

    Den Vector selber mußt du gar nicht delete'n - das macht dein Programm automatisch, wenn es beendet wird. Wenn du dir Sorgen um die Vector-Elemente machst, könntest du im Ernstfall eine atexit()-Funktion registrieren, die dir hinterherräumt (nur wenn du die einzufügenden Objekte mit new angelegt hast).



  • CStoll schrieb:

    Wenn du dir Sorgen um die Vector-Elemente machst, könntest du im Ernstfall eine atexit()-Funktion registrieren, die dir hinterherräumt (nur wenn du die einzufügenden Objekte mit new angelegt hast).

    Das ist ne gute Idee, da ich zufälliger Weise auch die Objekte mit new erzeuge.

    Danke schön


Anmelden zum Antworten