libuv读取完成回调的签名是:
void (*uv_read_cb)(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf)
我从文档中了解到,我的回调负责释放所提供的uv_buf_t*
的基本成员。我的问题是 - 谁负责释放buf指向的内存?
答案 0 :(得分:1)
考虑内部函数uv__read
。这是您调用回调的地方(预留uv__stream_eof
对此Q / A不太感兴趣)。
正如您在函数的the very first line所看到的那样,缓冲区被声明并定义为局部变量:
uv_buf_t buf;
如果你浏览整个函数,你可以看到带有uv_buf_init
的缓冲区is used,然后传递给你的回调(参见here,here,{如果您需要更多详细信息,请{3}},here,here和here。
所以,回到问题:
谁负责释放buf指向的内存?
既不是你也不是libuv。当超出范围时,缓冲区将自动释放。您无需关心并且文档清晰明了:您自己负责base
数据成员。