An object of type 
shared_lock controls the shared ownership of a
lockable object within a scope
.Shared ownership of the lockable object may be
acquired at construction or after construction, and may be transferred, after
acquisition, to another 
shared_lock object
.Objects of type
shared_lock are not copyable but are movable
.The behavior of a program
is undefined if the contained pointer 
pm is not null and the lockable
object pointed to by 
pm does not exist for the entire remaining
lifetime (
[basic.life]) of the 
shared_lock object
.