owns the surface and should call [cairo.surface.Surface.destroy] when done with it.
This function always returns a valid pointer, but it will return a pointer to a "nil" surface if an error such as out of memory occurs. You can use [cairo.surface.Surface.status] to check for this.