gpt4 book ai didi

c++ - 删除后 async_write 会导致段错误吗?

转载 作者:行者123 更新时间:2023-11-28 05:20:53 24 4
gpt4 key购买 nike

我正在使用 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;在写处理程序中。

所以当发送数据出错时,session会断开连接,然后自行删除。但是,writeHandler 之后出现段错误已经回来了。难道是因为我在删除this尽管它被捕获在 async_write 中?

最佳答案

一旦您删除此,对该对象的任何访问都是无效的。您是否在其他任何地方复制/捕获了指针都没有关系。

关于c++ - 删除后 async_write 会导致段错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41526553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com