Objekt wird gelöscht, während eine Methode des Objekts ausgeführt wird



  • Hallo,

    ich habe mal wieder eine (diesesmal ziemlich skurile) Frage:

    Was passiert, wenn eine Methode für ein Objekt ausgeführt wird, und das Objekt, dessen Methode das ist währenddessen gelöscht wird? 😮

    Beispielcode:

    class Foo;
    
    void Bar(Foo *zeiger)
    {
        delete zeiger;
        return;
    }
    
    class Foo
    {
        public:
        void Test(void)
        {
            //Mach irgendwas
            Bar(this);
            //Mach irgendwas
            return;
        }
    };
    
    int main(void)
    {
        Foo *zeiger = new Foo;
        zeiger->Test();
        return (0);
    }
    

    EDIT: Wenn man in der Methode nach dem Exitus des Objekts noch ein Member des Objekts benutzen WÜRDE würde es ja auf keinen Fall funktioneren. Meine Frage bezieht sich also darauf, wenn man das nicht tut.



  • Die Methoden liegen außerhalb des Objektes, also wird es wohl funktionieren (natürlich nur für per new allokierte Objekte). Zumindest mein Compiler (mingw-gcc) spuckt mir aber eine entsprechende Warnung aus.



  • Nicht ganz die gleiche Situation, bringt dich aber vielleicht trotzdem weiter: www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.15



  • Diese Situation hatte ich mal bei Popup-Fenster. Die löschen sich bei der Implementation, die ich nutzen muss selbst..
    Das fieste an solchen Kontruktionen ist, dass man höllisch aufpassen muss was nach dem Löschen des Objekts passiert.
    Der Rücksprung in eine Funktion des Objekts funktioniert zum Bleistift nicht mehr, wenn der freigegebene Speicher durch was anderes verwendet wird (wirklich nett zu debuggen).
    Generell stellt sich außerdem die Frage was mit den Zeigern auf das Objekt passiert.... es macht keinen Sinn auf solche Objekte zugreifen zu wollen, weil man nicht überprüfen kann ob die Objekte überhaupt noch existieren.


Log in to reply