vector Speicher freigeben



  • Hi

    Ich bin mir gerade unsicher ob ich im d-tor zuvor erstellten vector löschen soll oder ob das automatisch gemacht wird - und falls ja - Wie?

    Es sieht in Moment etwa so aus:

    class bla
    {
        private:
            vector<string> vStr;
        public:
            bla( );
            ~bla( );
            void machWasMitVector( );
    }
    
    bla::~bla( )
    {
        /*
         * sollte hier nicht sowas wie delete vStr
         * oder sowas in der Art stehen?
         */
    }
    

    Wenn ich so darüber nachdenke dann weiß ich gar nicht ob überhapt so sachen wie die sstreams ( allgemein streams) oder strings überhapt mit delete freigegeben werden müssen oder ob da sowas wie garbage collector dafür gibt - wie sieht's damit aus?


  • Mod

    Die werden automatisch zerstört. Das ist einer der Hauptgründe diese Klassen überhaupt, anstelle von rohen Zeigern, zu benutzen



  • Grundsätzlich gilt immer, wenn du new schreibst, musst du dich um das delete kümmern. Falls du kein new schreibst, dann musst du auch nichts selbst freigeben. (ausser bei z.B Smart Pointer o.ä)

    Also std::vector wird korrekt selbst freigegeben. (Wenn du allerdings Elemente speicherst, welche du mit new angefordert hast, dann musst du die schon selbst freigeben, aber das ist bei std::string nicht der Fall).





  • Ausserdem sollte man using namespace nicht in Headerdateien verwenden, weil dies den Namensraum für alle inkludierenden Dateien unwiderruflich offenlegt, was nicht immer erwünscht ist.



  • Alles klar - danke


Anmelden zum Antworten