Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

31.10.2010, 15:48

Vector und Objekte

Hallo liebe Spieleprogrammierer,

ich muss mich gerade mit der Situation beschäftigen, dass ich viele Punkte auf den Bildschirm zeichnen muss. Diese Punkte müssen von Zeit zu Zeit neu berechnet werden. Meine Idee ist es diese Punkte in einem Vector von Objekten zu speichern. Die Zeichenroutine läuft über diesen Vector und gibt die Punkte auf dem Bildschirm aus.

C-/C++-Quelltext

1
2
3
4
5
6
 Class MyPoint  
{
 ......
 } ;
vector<MyPoint *>  dpoints;
 dpoints.push_back(new MyPoint(x,y,));

Wenn die Punkte neu berechnet werden, wollt ich die Objekte löschen und den Vector leeren und danach neu berechnete Punkte hinzufügen. Ist das eine gute Idee, oder gibt es noch andere Möglichkeiten?

C-/C++-Quelltext

1
2
3
4
5
 for(unsigned int i=0; i < dpoints.size();i++)  
{    
    delete dpoints.at(i);  
}   
dpoints.clear();

Und kann es dabei zu Komplikationen kommen wie z.B. Lesender und Schreibender Zugriff bei einem neu zeichnen des Fensters.? Danke für eine Antwort :-)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

31.10.2010, 16:10

Was mir so spontan einfällt sind folgende punkte:
1. über std::vector kann auch iteriert werden. Ist ggf effizientier als die geschichte mit dem at
2. wenn nur einige punkte sich ändern, würde ich die punkte wirklich ändern und nicht alle löschen
3. ggf. wäre für dich der einsatz von smart_ptr etc. hilfreich, weil damit vermeidet man dass man alles von hand löschen muss, allerdings wird es dadurch auch langsamer
4. Wenn du die Punkte direkt im vector speicherst wäre der verzicht auf new/delete sinnvoll. Vorallem bei kleineren Klassen kann new/delete unnötig teuer sein (naja intern läuft es auch wieder darauf hinaus, aber dann kann der vector immerhin alles auf einen schlag de/allokieren).
5. wenn du schon vorher die größe des vectors weißt, kann reserve die zeiten deutlich reduzieren

6. prinzipiell geht natürlich auch dein ansatz und das von mir angesprochene sind eher ansätze es ggf. zu beschleunigen :)
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

3

01.11.2010, 17:58

Dem ist nichts mehr hinzuzufügen.
Diese new/delete Monster die du damit baust können wirklich äußerst langsam werden! Versuch sowas zu vermeiden.

Werbeanzeige