Do we need all these constructors? If not, I propose removing one of the two above. My concern is that the semantics is slightly different. If I use one, then I modify the state I passed to LockedRobotState, for the first case, the change is visible in this object, and for the second, the change is not visible. I would prefer to keep just the plain & constructor, but not the RobotStatePtr& constructor.