async_write在删除时会导致分段错误吗?

时间:2017-01-07 21:05:16

标签: c++ boost segmentation-fault boost-asio

我使用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中捕获的吗?

1 个答案:

答案 0 :(得分:1)

一旦delete this对该对象的任何访问无效。如果你在任何其他地方复制/捕获指针都无关紧要。