In the benchmark this requires the compiler to generate code that makes sure that the object was not changed by issuing an exclusive request for the data plus the additional pointer dereferencing.
To check what is really happening I recommend two things:
1) Look at the generated code and see what the compiler issues. 2) Compare object* vs shared_ptr<object> 3) Compare unique_ptr vs object vs object*
My assumption is that unique_ptr will be faster than shared_ptr and have the same speed as object* and that will be a bit slower than object.