node.js - (如何)我应该销毁 uv_async_t 吗?

标签 node.js strict-aliasing libuv

完成 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 的示例调用的注释:您只能在 close 回调中释放句柄的内存,而不能在之前,因此如果您传递 NULL 并且该句柄已分配在堆上不知道什么时候可以释放内存。

关于node.js - (如何)我应该销毁 uv_async_t 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38833227/

相关文章:

sockets - 如何判断数据是否通过 HTTP 保持事件连接到达?

c++ - v8、libuv、nodejs、win32 api - 如何调用 EnumWindows 并回调调用 javascript 函数?

node.js - 创建 React App 时 package.json 中缺少依赖项

c - 为什么 POSIX 与 ISO C 标准相矛盾

c - libuv 和 uv_buf_init : who should free what?

c - 在不违反标准的情况下使用指向结构的指针对数组进行别名

c++ - 我什么时候可以打破别名规则?

node.js - 在 Node 服务器上安装 SSL 证书

node.js - Electron 安装错误 : Failed at the electron@1. 4.6 安装后脚本 'node install.js'

javascript - 如何在 Node.js 中打印字符串的文字表示?