std::unique_ptr uses std::default_delete, which calls delete on the
pointer managed by the unique_ptr. However, the xcb types were not
allocated with new, but with free. Hence, tools like asan will report a
malloc/delete missmatch. This is generally not an issue in practice, but
can be annoying when debugging.
To remedy this, we use a custom deleter which simply uses free instead
of delete.