std::vector<eigene Klasse> : Destruktor von eigene Klasse?



  • Hallo Forum,

    wenn ich eine Klasse CEigeneKlasse habe, und diese in einem Vektor verwende (std::vector<CEigeneKlasse>), wird dann beim Verlassen des Gültigkeitsbereichs dieses Vektors jeder einzelner Destruktor der Objekte des Typs CEigeneKlasse aufgerufen?

    Vielen Dank!



  • JA

    Nur wenn du Pointer auf deinen Klasse in den Vektor steckst musst du selbst
    wieder "wegräumen".



  • D.h. also in folgendem Beispiel

    class CEigeneKlasse
    {
    public:
    CEigeneKlasse() { m_pnAnz = new int; };
    ~CEigeneKlasse() { delete m_pnAnz; };
    
    private:
    int *m_pnAnz;
    };
    
    int main(...)
    {
    std::vector<CEigeneKlasse> test;
    test.push_back( CEigeneKlasse() );
    test.push_back( CEigeneKlasse() );
    
    }
    

    werden die Destruktoren beider erzeugter Objekte aufgerufen und damit der int-Pointer jedesmal deleted und es gibt keine memory leaks?



  • atlastraeger schrieb:

    werden die Destruktoren beider erzeugter Objekte aufgerufen und damit der int-Pointer jedesmal deleted und es gibt keine memory leaks?

    Das dürfte sehr schnell abstürzen, weil du keinen Copykonstruktor hast, bzw. weil der vom Compiler automatisch generierte nicht das Richtige tut.



  • Okay, d.h. also nach Hinzufügen eines copy constructor, der dafür sorgt, dass jedes Objekt seinen eigenen Pointer samt Inhalt kriegt, funktioniert's ?



  • Ein Zuweisungsoperator wäre wohl auch nicht verkehrt. Aber dann sollte es klappen 😉



  • atlastraeger schrieb:

    Okay, d.h. also nach Hinzufügen eines copy constructor, der dafür sorgt, dass jedes Objekt seinen eigenen Pointer samt Inhalt kriegt, funktioniert's ?

    ja.


Anmelden zum Antworten