C++ code:
person* NewPerson(void) { person p; /* ... */ return &p; //return pointer to person. }
C# code:
person
person* NewPerson(void) { person p(); /* ... */ return &p; //return pointer to person. }
p is not a person, see most vexing parse. As such, you'd get a compiler error.
p
For the rest, yes you're right.