2017-06-30 37 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數據成員。