(如何)我应该摧毁一个 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 并且句柄是在堆上分配的,您就赢了不知道什么时候可以释放内存。
在我完成 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 并且句柄是在堆上分配的,您就赢了不知道什么时候可以释放内存。