Документация для uv_write
состояний [ 1 ]:
Примечание Память, на которую указывают буферы, должна оставаться действительной до получения обратного вызованазывается. Это также верно для uv_write2 ().
Таким образом, для базы буфера может потребоваться динамическое распределение. Вызывающая функция может выглядеть следующим образом:
void write_to_stream(uv_stream_t* stream) {
uv_write_t* write_req = new uv_write_t;
uv_buf_t buf{};
buf.base = new char[1024];
buf.len = 1024;
// fill the buffer
uv_write(write_req, stream, buf, 1, on_write);
}
В этом случае память, выделенная new char[1024]
, должна быть действительной до тех пор, пока не будет запущен обратный вызов on_write
.
Просмотрподпись обратного вызова void on_write(uv_write_t* req, int status)
неочевидно, как освободить эту память, поскольку, похоже, нет способа получить доступ к этому указателю из обратного вызова.
void on_write(uv_write_t* req, int status) {
// how to find the memory allocated for req's buffer?
delete[] ???;
}
Каков предполагаемый способ освобождения этой памяти один разэто больше не нужно?