Actually, I think I have a better way which uses auto_ptr (or the boost ptr containers) as you suggested. It still isn't thread safe, but this isn't of immediate concern, and there are other methods for this anyway.
Before, I was storing a map of shared_ptrs in the ObjectManager and a weak_ptr reference in any ObjectHandles to check if the object is still valid. Instead: