Der Unterschied ist, dass das erase den Pointer aus dem vector löscht, während das NULL setzen ihn nur auf NULL setzt. Und das delete löscht das Objekt auf das der Pointer zeigt. Das sind 3 völlig verschiedene Dinge, die absolut nichts miteinander zu tun haben. Wenn du nur das Element löscht, dann ist einfach nur der Pointer aus dem vector weg. Wenn du das Element im vector auf NULL setzt, dann hat es danach einfach nur den Wert NULL. Nichts davon hat irgendeinen Einfluss auf das mit new erzeugte Objekt, auf das der Pointer zeigt. Erst ein delete löscht dieses Objekt. Das delete wiederum hat aber keinen Einfluss auf irgendwelche Pointer, die vielleicht mal dort hingezeigt haben.
Vor allem übergibst du z.B. da:
|
C-/C++-Quelltext
|
1
|
void Player::pickUp(Ressource* res)
|
Auch nur den Wert eines Pointers und nicht den Pointer selbst. D.h. wenn du da im Aufruf dieser Funktion auch ein Objekt aus deinem vector angibst, dann wird trotzdem nur der Wert und nicht das Objekt im vector selbst übergeben. Ich glaub du hast da wohl noch ein paar Verständnisprobleme. Schau dir vielleicht nochmal genau an, was der Unterschied zwischen Call-by-value und Call-by-referece ist.
Btw: In C++ verwendet man üblicherweise kein NULL, sondern einfach nur 0, oder jetzt neu: nullptr.