shared_ptr move assignment is somewhat expensive, actually -- it needs to conditionally call the destructor on the old resource