You have the right idea except you may want to allow the rocket class to be created by a class that manages objects. Then you would do something like addRocket() inside of PlayerFire().
In my asteroids game I add lasers to a laser manager class which then handles the object from that point on.
My solution is something along these lines:
Code:
void Player::Fire()
{
X3DGetApp()->GetLaserMgr()->Add(new Laser(....));
}
X3DGetApp() returns the application object which then has public accessor functions that allow access to it's various manager classes.
You could also go with a factory approach in that you have a rocket factory which in turn produces rocket objects. So you would get an instance of the factory and then call create() which would then create the rocket.