Does with-foreign-pointer free up the memory after body is executed?

I have been using constructs such as:

     (let ((num-channel-groups* (foreign-alloc :uint)))
        (ddc-get-num-channel-groups file-handle* num-channel-groups*)
        (prog1 (mem-ref num-channel-groups* :uint)
          (foreign-free num-channel-groups*)))


Is with-foreign-pointer the idiomatic way to accomplish the same thing?

Thanks

Mirko