Я унаследовал некоторый код boost :: asio, который использует асинхронные методы для чтения/записи данных с помощью некоторого сокета. В настоящее время код использует повышение :: привязку для чтения/записи обработчики функций-членов класса, как это:Каковы преимущества или недостатки использования хранимой функции boost :: function vs boost :: bind with boost :: asio?
boost::asio::async_read(socket_, boost::asio::buffer(&in_data.header.packet_size, 1), boost::bind(&SocketIO::handle_read, shared_from_this(), boost::asio::placeholders::error);
Я хотел бы изменить код, чтобы использовать сохраненную версию связывают с использованием повышение :: функции, но я неясно, есть ли какие-либо преимущества или недостатки для этого. Я бы подумал, что не воссоздать привязку непрерывно сократит выделение объектов. Однако в дополнительной документации для async_receive (Listed Here) указано: «Копии будут сделаны из обработчика по мере необходимости». Я не уверен, какие условия потребуют сделать копию или нет.
Любое понимание этого будет оценено по достоинству.
Я считаю, что он не указан в отношении условий, которые могут привести к копированию обработчика. Когда семантика перемещения недоступна, копии будут сделаны в нескольких местах в пределах Boost.Asio. Когда доступны семантика перемещения, и обработчик не является «rvalue», я полагаю, что одна копия сделана, а затем перемещена в Boost.Asio. –