Judging by "Prize *p;" and "p = new Prize;" I think you will be fine. You create a new pointer every time you run the function and you point to a new object every time you start the function. I haven't worked in C++ in a bit but I don't see why this would have the pointers all point the same object.
The problem you are worried about would happen if you passed in the Prize object and set that Prize object to be a new Prize I would think. There you could possibly run into the new Prize overwriting the old one in the same location so the pointers all point to the same spot in the memory.
The problem you are worried about would happen if you passed in the Prize object and set that Prize object to be a new Prize I would think. There you could possibly run into the new Prize overwriting the old one in the same location so the pointers all point to the same spot in the memory.