- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在this source file有两个类:tcp_connection
和 tcp_server
。在我看来,我已经选择了相关的代码位,但您可能想要引用完整的源代码以获取更多信息。
class tcp_connection : public boost::enable_shared_from_this<tcp_connection>
{
public:
typedef boost::shared_ptr<tcp_connection> pointer;
void start()
{
message_ = make_daytime_string();
boost::asio::async_write(socket_, boost::asio::buffer(message_),
boost::bind(&tcp_connection::handle_write, shared_from_this()));
}
};
class tcp_server
{
private:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_connection->socket(),
boost::bind(&tcp_server::handle_accept, this, new_connection,
boost::asio::placeholders::error));
}
};
我的问题很简单:我们将如何使用 shared_from_this
作为 async_write
函数中的 bind
参数并使用 this
作为 中的
函数? bind
参数async_accept
最佳答案
共享指针管理动态分配对象的生命周期。每个持有的指针都会增加一个引用计数,当所有持有的指针都消失时,被引用的对象将被释放。
只有一台服务器,而且不是动态分配的。相反,该实例比接受器(可能还有 io_service)的生命周期更长,因此没有任何异步操作可以相信该对象能够存活足够长的时间。
每个客户端生成一个新连接,动态分配 (make_shared) tcp_connection
实例,然后在其上启动异步操作。
服务器不保留共享指针的拷贝,因此当连接上的所有异步操作完成时(例如,因为连接断开),tcp_connection
对象将被释放。
然而,因为当异步操作正在进行时对象必须不被销毁,所以您需要将完成处理程序绑定(bind)到共享指针 (shared_from_this
) 而不是 这个
。
关于c++ - shared_from_this 和 this 的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47459959/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!