2017-06-30 88 views
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指向的内存?

回答

1

考虑内部功能uv__read。这是你的回调被调用(预留uv__stream_eof就是这个Q/A多不感兴趣的)。
正如你可以在函数的the very first line看到,缓冲区声明和定义为一个局部变量:

uv_buf_t buf; 

如果你走在整个功能,你可以看到相同的缓冲is useduv_buf_init,然后传递给你的回调(见herehereherehere,​​和here,如果你想了解更多详细信息)。 那么,回到问题:

谁负责释放由buf指向的内存?

无论是你还是libuv。缓冲区在超出范围时会自动释放。您不必关心这一点,并且文档很清楚:您的唯一责任是base数据成员。