(怎么样)我应该销毁一个uv_async_t?

时间:2016-08-08 15:31:57

标签: node.js strict-aliasing libuv

在我完成uv_async_t之后,我应该销毁它以避免任何泄漏,对吧?从浏览文档开始,我似乎应该使用uv_close(),但需要uv_handle_t*,而不是uv_async_t*。此外,看起来像转换它(如在uv_close((uv_handle_t *)async, NULL)中)会导致严格的别名违规。那是我应该做的吗?

1 个答案:

答案 0 :(得分:3)

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

所有句柄共享基本结构,因此IIRC严格别名规则不会被破坏,因为它相当于将其强制转换为结构的第一个成员。

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