001
16.06.2005, 14:23 Uhr
doppler
|
Die priority_queue<..> pq ist in beiden Fällen ein lokales Objekt. Das heißt, wenn fuelleQueue() verlassen wird, wird der Destruktor für pq aufgerufen. Im zweiten Fall sind außerdem die temp-Objekte lokal und werden bei Verlassen der Funktion zerstört. Im ersten Fall umgehst du das, indem du sie mit new erzeugst (alle Objekte, die mit new erzeugt werden, müssen mit delete zerstört werden.
Um die Probleme zu lösen, solltest du an die Funktion eine Referenz oder einen Zeiger auf eine priority_queue übergeben:
C++: |
Applikation::fuelleQueue(priority_queue< MyData >& pq) { // Daten ermitteln und Objekt erstellen... MyData temp(); // In Queue einfuegen pq.push(temp); }
|
Auf die Daten in pq kannst du dann auch außerhalb der Funktion zugreifen.
Zu beachten ist auch, dass andernfalls zwar eine priority_queue gefüllt wird, diese aber nicht außerhalb der Funktion zur Verfügung steht.
Dass im ersten Fall nicht der neue Operator < benutzt wird, ist klar, da du ja keine Objekte vom Typ MyData vergleichst, sondern Zeiger vom Typ MyData*. Die haben einen eigenen < Operator und ich glaube nicht, dass man den überladen kann. Dieser Post wurde am 16.06.2005 um 14:24 Uhr von doppler editiert. |