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
數據成員。