It's quite simple: ValueInstance doesn't own the object which is why it takes a pointer in its constructor. It allows you to use reflection to manipulate an object but where that object is stored is up to the user of the class. This allows ValueInstance to manipulate member variables of a given class because it cant own these types of objects (already owned by the parent object).