JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=752713ed36c0766c2c01ef63787b16e3Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Objekt aus einem Vector entfernen

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 05.07.2005, 20:21    Titel: Objekt aus einem Vector entfernen Antworten mit Zitat

Hallo

Ich habe folgende 2 Probleme also mal das erste.
1) Wie kann ich in ner Memeberfunkion ein Objekt loeschen.
Geht das einfach indem ich den Destruktor aufrufe
CObjekt::~CObjekt()
2) Wie kann ich nachdem ich das Objekt geloescht hab es auch noch aus einem Vector loeschen.

bsp:.

vector<CObjekt> Player
[/cpp]
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.07.2005, 20:25    Titel: Antworten mit Zitat

1) meist wird dazu eine Methode erstellt die alles nötige im Objekt bereinigt
CPP:
Free()


2)

CPP:
int i = Player.find(CObjekt);
if(i>=0)
  Player.erase(Player.begin()+i);


Korigiert mich mal zu 2tens ich glaube find funktioniert so nicht.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 05.07.2005, 20:30    Titel: Antworten mit Zitat

Danke Fallen fuer die schnelle antwort
zu erstens wennn man den Destruktor einer Klasse aufruft wird sie dann nicht einfach gelöscht (speicher frei)
2 funktioniert bei mir nicht

thx schon mal
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.07.2005, 20:33    Titel: Antworten mit Zitat

1) nein speicher wird nur durch delete oder ähnliches frei gegeben

2) dann so:

CPP:
for(unsigned int i=0; i<Player.size(); i++)
  if(Player[i]==gesuchtesCObjekt)
  {
    Player.erase(Player.begin()+i);
    break;
  }


oder hier etwas korrigiert

CPP:
int i = Player.find(gesuchtesCObjekt);
if(i>=0)
  Player.erase(Player.begin()+i);

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 05.07.2005, 20:36    Titel: Antworten mit Zitat

jo zu 2 das probier ich morgen
aber noch ne frage was macht dann der destrucktor eigentlich

thx
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.07.2005, 20:41    Titel: Antworten mit Zitat

Florian hat Folgendes geschrieben:
jo zu 2 das probier ich morgen
aber noch ne frage was macht dann der destrucktor eigentlich

thx


dert Destruktur tut das was innerhalb seines Funktionsblocks angegeben wird. Der Destruktur wird nur aufgerufen wenn der Speicher für das entsprechende Objekt freigegeben wird (delete oder lokaleVar wird freigegeben wenn der Block in dem es erstellt wurde beendet wurde)
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 37
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 05.07.2005, 20:46    Titel: Antworten mit Zitat

und bei meinen 2 prob wird dann der speicher frei oder.
ach noch ne frage

wenn ich zuerst ein Vector hab der size 5 hat und dann wird das
3 Objekt "gelöscht" wird dann aus Player[5] - Player[4] oder wie lauft das ab
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
PeaceKiller
JLI Master


Alter: 36
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 05.07.2005, 20:48    Titel: Antworten mit Zitat

Florian hat Folgendes geschrieben:
und bei meinen 2 prob wird dann der speicher frei oder.
ach noch ne frage

wenn ich zuerst ein Vector hab der size 5 hat und dann wird das
3 Objekt "gelöscht" wird dann aus Player[5] - Player[4] oder wie lauft das ab


Ja, zu beidem.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 41
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 05.07.2005, 20:50    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:
Florian hat Folgendes geschrieben:
und bei meinen 2 prob wird dann der speicher frei oder.
ach noch ne frage

wenn ich zuerst ein Vector hab der size 5 hat und dann wird das
3 Objekt "gelöscht" wird dann aus Player[5] - Player[4] oder wie lauft das ab


Ja, zu beidem.


Ja zum 2ten
Jain zum ersten.

1) wenn du nen Pointer in dem vektor hast wird der speicher für den pointer zwar frei aber nicht das Objekt hinter dem Pointer da musste noch extra delete aufrufen
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 05.07.2005, 21:31    Titel: Antworten mit Zitat

Löschen eines Eintrags aus einem Vector ist immer Tricky und dort fallen viele Anfänger und sogar Profis oft drauf rein: Inkrementierung!

CPP:
        // Bälle updaten und ggf. entfernen
    for (vec_ball_it_=vec_ball_.begin(); vec_ball_it_!=vec_ball_.end(); /*++vec_ball_it_*/)
    {
        if (vec_ball_it_->getY() > 480)
            vec_ball_it_ = vec_ball_.erase (vec_ball_it_);
        else
        {
            vec_ball_it_->update (delta);
            ++vec_ball_it_;
        }
    }


DIe Inkrementierung immer im if/else Block ausführen und niemals im For-Header
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 06.07.2005, 06:36    Titel: Antworten mit Zitat

Ich habe zu dem Thema einen Eintrag in der FAQ btw.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum