2
的libuv的签名读取完成回调:libuv读回调uv_buf_t清理
void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf)
我从文档的理解是,我的回调是负责释放提供uv_buf_t*
的基础材料。我的问题是 - 谁负责释放buf指向的内存?
的libuv的签名读取完成回调:libuv读回调uv_buf_t清理
void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf)
我从文档的理解是,我的回调是负责释放提供uv_buf_t*
的基础材料。我的问题是 - 谁负责释放buf指向的内存?
考虑内部功能uv__read
。这是你的回调被调用(预留uv__stream_eof
就是这个Q/A多不感兴趣的)。
正如你可以在函数的the very first line看到,缓冲区声明和定义为一个局部变量:
uv_buf_t buf;
如果你走在整个功能,你可以看到相同的缓冲is used与uv_buf_init
,然后传递给你的回调(见here,here,here,here,和here,如果你想了解更多详细信息)。 那么,回到问题:
谁负责释放由buf指向的内存?
无论是你还是libuv。缓冲区在超出范围时会自动释放。您不必关心这一点,并且文档很清楚:您的唯一责任是base
数据成员。