Yes, you got it right.
However, in C++ you would really do like this
person NewPerson()
{
person p;
/* ... */
return p; //return person.
}
and be pretty sure that in a call
person x = NewPerson();
the compiler will optimize out the copying of the return value.