Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » erase() benötigt delete?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.12.2006, 22:52 Uhr
~eRaZoR
Gast


Hi...
ich habe folgenden Code und Frage mich ob ich meine Vectorelemente die ich mit new anfordere nur mit erase wieder freigebe, oder zusätzlich ein delete brauche?


C++:

class Chat_impl : virtual public POA_Chat {

    private:
        vector<User> userlist;
    public:
        Chat_impl(){ };
    
  
        CORBA::Short Chat_impl::idl_login( const char* nick, const char* ip ){
  
            CORBA::Short success=0;
                
            User *u = new User((string)nick, (string)ip);
            string str;
            IteratorType it;
            bool v=true;

            for(it = userlist.begin(); it != userlist.end(); it++){
                cout << it->get_ip() << it->get_name() << endl;
                (it->get_ip() == ip)? v=false : v=true;
            }
            if(v == true){
                userlist.push_back(*u);
                str ="User " + (string)nick + " erfolgreich eingeloggt.";
                success = 1;
            }
            else {
                str ="User " + (string)nick + " bereits eingeloggt.";
            }
            
            return success;
            };
    
    
    
        CORBA::Short Chat_impl::idl_disconnect( const char* ip ) {
            
            CORBA::Short success=0;
            
            IteratorType it;
            string str;
            cout << "Useranzahl: " << userlist.size() << endl;
            for (it = userlist.begin(); it != userlist.end(); it++){
                if((string)it->get_ip() == ip){
                    str = "Loesche " + it->get_name() +" !";
                    
                    // DELETE ???
                    
                    userlist.erase(it);
                    success = 1;
                    break;
                }
            }
            
            return success;
        };





Danke für jeden Tip!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2006, 23:54 Uhr
~stephanw
Gast


erase() löscht die Elemente aus dem Vector. Wenn in dem Vector komplette Objekte liegen, werden diese zerstört. Wenn es ein Vektor von Zeigern ist, werden nur die Zeiger aus dem Vector entfernt. Wenn Du die zugehörigen Objekte löschen willst, musst Du vorher delete auf den Zeiger aufrufen.

In Deinem Beispiel legst Du einen User per new an. In den Vector legst Du eine Kopie des Objektes. Erase() löscht dann die Kopie im Vector, dass per new angelegte Objekt lebt weiter. Entweder legst Du es gar nicht per new an sondern ganz normal als lokale Variable, dann kannst Du es in den Vektor kopieren und alles ist gut. Oder Du machst aus Deinem Vector ein Vector von Zeigern und musst wie schon gesagt das Objekt dann manuell löschen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: