我使用Boost通过TCP发送数据async_write
:
std::shared_ptr<std::vector<std::string>::iterator> iter = std::make_shared<std::vector<std::string>::iterator>(this->m_vDataToWrite.begin());
boost::asio::async_write(this->socket_, boost::asio::buffer(*message),
boost::asio::transfer_all(), boost::bind(&Session::writeHandler,
this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred(),
message,
iter
));
// ...
void Session::writeHandler(const boost::system::error_code &error, std::size_t bytes_transferred, std::shared_ptr<std::string> message, std::shared_ptr<std::vector<std::string>::iterator> it)
{
if(error)
{
std::cout << "Write handler error: " << error.message() << std::endl;
this->disconnect();
delete this;
return;
}
//....
注意写处理程序中的delete this;
。
因此,当发送数据时出错时,会话将断开连接,然后自行删除。但是,writeHandler
返回后存在分段错误。可能是因为我删除了this
,虽然它是在async_write
中捕获的吗?
答案 0 :(得分:1)
一旦delete this
对该对象的任何访问无效。如果你在任何其他地方复制/捕获指针都无关紧要。