Move semantics with std::unique_ptr instead of a raw pointer