(如何)我应该摧毁一个 uv_async_t?

(How) am I supposed to destroy a uv_async_t?

在我完成 uv_async_t 之后,我应该销毁它以避免任何泄漏,对吗?看一眼文档,似乎我应该为此使用 uv_close(),但它需要一个 uv_handle_t*,而不是 uv_async_t*。此外,看起来强制转换它(如 uv_close((uv_handle_t *)async, NULL))会导致严格的别名冲突。那是我应该做的吗?

是的,您必须将 uv_async_t* 转换为 uv_handle_t*。这就是 libuv 的内部工作方式。

所有句柄共享基本结构,因此没有违反 IIRC 严格的别名规则,因为这相当于将其强制转换为结构的第一个成员。

关于您对 uv_close 的示例调用的注释:您只能在关闭回调中释放句柄的内存,而不是之前,因此如果您传递 NULL 并且句柄是在堆上分配的,您就赢了不知道什么时候可以释放内存。