stl list Elemente als Pointer



  • Hallo ich habe mir eine Liste
    erstellt die folgend diefiniert ist:

    std::list<Interface*> m_aLinkList;
    

    Nun hänge ich die Elemente wie folge rein:

    int SomeClass::AddLink(Interface *&pLink)
    {
    	m_aLinkList.push_back(pLink);
    	return 0;
    }
    

    Die Elemente lösche ich über:

    int SomeClass::RemoveLink(int iid)
    {
    	std::list<Interface*>::iterator pos;
    	for(pos = m_aLinkList.begin(); pos != m_aLinkList.end(); pos++ )
    	{
    		if((*pos)->isIID(iid))
    		{
    			m_aLinkList.erase(pos);
    
    			break;
    		}
    	}
    
    	return 0;
    }
    

    Nur wie udn wo mach ich das delete auf den Pointer??
    Ich hab die ja mit new angelegt.
    Die Suche funktioniert leider nicht sonst würde ich über die erstmal suchen.
    Also bitte helft mir... 🙂

    Gruß,
    Stalin



  • Am besten vor dem erase, danach ist dein Element ja weg.



  • Stalin schrieb:

    Die Elemente lösche ich über:

    int SomeClass::RemoveLink(int iid)
    {
    	std::list<Interface*>::iterator pos;
    	for(pos = m_aLinkList.begin(); pos != m_aLinkList.end(); pos++ )
    	{
    		if((*pos)->isIID(iid))
    		{
    			m_aLinkList.erase(pos);
    			
    			break;
    		}
    	}
    
    	return 0;
    }
    

    Nur wie udn wo mach ich das delete auf den Pointer??

    Am Besten bevor du das Element aus der Liste löschst und damit bevor du den Iterator invalidierst.
    Sprich:

    if((*pos)->isIID(iid))
    {
        delete *pos;
        m_aLinkList.erase(pos);
        break;
    }
    


  • Also das funktioniert wunderbar. Danke.
    Nur noch eine Frage.
    Wann muss ich den CopyKonstruktor und den Zuweisungsoperator
    überschreiben wenn ich vector usw. benutze?
    Oder muss ich das nie? Ich hab das irgendwo mal in diesem Forum gelesen meine ich. Denn jetzt hab ich es nicht getan und es geht...



  • Wann muss ich den CopyKonstruktor und den Zuweisungsoperator
    überschreiben wenn ich vector usw. benutze?

    Die Elemente eines Vektors müssen copy-constructible und assignable sein. Das sind Klassen in C++ erstmal automatisch, da der Compiler beide Member bei Bedarf selbst generiert.
    Du musst den Copy-Ctor und Zuweisungsoperator immer dann selbst implementieren, wenn die generierte Variante nicht korrekt wäre. Das ist z.B. immer dann der Fall, wenn deine Klasse Ressourcen besitzt, selbige aber über Pointer verwaltete.


Anmelden zum Antworten