| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Florian Super JLI'ler

Alter: 37 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 05.07.2005, 20:21 Titel: Objekt aus einem Vector entfernen |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.07.2005, 20:25 Titel: |
|
|
1) meist wird dazu eine Methode erstellt die alles nötige im Objekt bereinigt
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 |
|
 |
Florian Super JLI'ler

Alter: 37 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 05.07.2005, 20:30 Titel: |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.07.2005, 20:33 Titel: |
|
|
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 |
|
 |
Florian Super JLI'ler

Alter: 37 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 05.07.2005, 20:36 Titel: |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.07.2005, 20:41 Titel: |
|
|
| 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 |
|
 |
Florian Super JLI'ler

Alter: 37 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 05.07.2005, 20:46 Titel: |
|
|
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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 05.07.2005, 20:48 Titel: |
|
|
| 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 |
|
 |
Fallen JLI MVP


Alter: 41 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 05.07.2005, 20:50 Titel: |
|
|
| 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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 05.07.2005, 21:31 Titel: |
|
|
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 |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 06.07.2005, 06:36 Titel: |
|
|
Ich habe zu dem Thema einen Eintrag in der FAQ btw. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
| Nach oben |
|
 |
|