在我完成uv_async_t
之后,我应该销毁它以避免任何泄漏,对吧?从浏览文档开始,我似乎应该使用uv_close()
,但需要uv_handle_t*
,而不是uv_async_t*
。此外,看起来像转换它(如在uv_close((uv_handle_t *)async, NULL)
中)会导致严格的别名违规。那是我应该做的吗?
答案 0 :(得分:3)
是的,您必须将uv_async_t*
强制转换为uv_handle_t*
。这就是libuv内部工作的方式。
所有句柄共享基本结构,因此IIRC严格别名规则不会被破坏,因为它相当于将其强制转换为结构的第一个成员。
关于你对uv_close
的示例调用的注释:你只能在关闭回调中释放句柄的内存,而不是之前,所以如果你传递NULL并且在堆上分配了句柄你就不会知道什么时候可以释放记忆。