The object should retain its settings when passed by reference or pointer. The behavior that you're seeing is likely an issue with the persistence of the settings at design-time rather than an issue with how the object is passed. Are you using Visual C++ 6.0 or Visual C++ .NET? If the latter, this is a known issue that is documented in the Measurement Studio 6.0 for Visual C++ .NET README:
"In Visual C++ .NET, the Measurement Studio 3D Graph and User Interface controls do not update correctly when you modify the property pages after running the program. When you use the property pages to change a property after running the program, and compile and run the program again, the property change does not take effect. To work around this issue, make the change in t
he property pages, move the control on the dialog resource, and move the control back to its original position on the dialog resource. Alternatively, close the resource editor after modifying the property pages and before running the program, and reopen the resource editor. When you run the program, the control appears with the updated property."
- Elton