I find it better and more efficient to make a function that takes a pointer, like the register:
Code:
void Register::RegisterCar(Car* pCar)
And creating a new Car object and passing it along:
Code:
Register.RegisterCar( new Car(...) );
It doesn't hug stack space, it doesn't do a lot of copying and I'm sure there are other benefits as well.
The register could simply be responsible for cleaning up all the cars when it destructs.
And it looks more object-oriented to me, as well, though that could just be me.