Нужно ли удалять мой буфер после отправки его в boost :: asio :: buffer? - PullRequest
0 голосов
/ 06 декабря 2010

Sp У меня есть такая функция:

void WriteToUrl(const unsigned char *buf, int size)
{
boost::asio::write(s, boost::asio::buffer(buf, size));
}

Нужно ли удалять буфер, если я не использую его где-либо еще?Как мне очистить после функции у?

Ответы [ 2 ]

4 голосов
/ 06 декабря 2010

Если я понял, что вы всегда являетесь владельцем буфера 'buf'.С помощью синхронных операций as :: write вы можете удалить буфер, как только :: write завершится.В асинхронных операциях as :: async_write необходимо предоставить токен асинхронного завершения (обратный вызов), который будет вызываться после завершения операции.Вы можете удалить buf в этом обратном вызове.

2 голосов
/ 06 декабря 2010

У вас нет указателя на буфер, который вы можете удалить, даже если бы захотели.

Входные данные buf используются для создания Boost.Asio buffer, а затем память, используемая в этой конструкции, управляется библиотекой.Вызов write блокируется до тех пор, пока не будут записаны все данные, поэтому я представляю, что данные не копируются внутри (но я не уверен в этом).

Конечно, вы должны выполнить любую необходимую очистку буфера, который вы дали конструктору (buf), когда закончите с ним.

...