After I'm done with a uv_async_t
, I'm supposed to destroy it to avoid any leaks, right? From glancing at the docs, it appears I'm supposed to use uv_close()
for this, but it takes a uv_handle_t*
, not a uv_async_t*
. Furthermore, it looks like casting it (as in uv_close((uv_handle_t *)async, NULL)
) would cause a strict aliasing violation. Is that what I'm supposed to do anyway?
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
Yes, you have to cast the uv_async_t*
to uv_handle_t*
. That's how libuv internally works.
All handles share the base structure, so IIRC strict aliasing rules are not broken because it amounts to casting it to the first member of the structure.
A note on your example call to uv_close
: you can only free the memory for a handle in the close callback, not before, so if you pass NULL and the handle was allocated on the heap you won't know when you can free the memory.