enable_shared_from_this用法分析
一、背景 在 为什么需要异步编程 文章末尾提到,"为了使socket和缓冲区(read或write)在整个异步操作的生命周期一直保持活动,我们需要采取特殊的保护措施。你的连接类需要继承自enabled_shared_from_this,然后在内部保存它需要的缓冲区,而且每次异步调用都要传递一个智能指针给this操作"。本文就详细介绍为什么使用enabled_shared_from_this就能保证对象的生命周期,以及enabled_shared_from_this内部的具体实现分析。 二、为什么需要保证对象生命周期 首先想象下同步编程,比如socket建立connect后,read或者write数据,因为是同步阻塞的,数据传输完后,socket对象就已经完成了此次任务,此时就算对象销毁,也并不会引起异常。但是异步编程就不一样了,当一个线程调用一个异步函数(例如:该函数还是socket写文件任务),该函数会立即返回,尽管规定的任务还没有完成,这样线程就会执行异步函数的下一条语句,而不会被挂起。只有当"写文件任务"完成后,由新的线程发送完成消息来执行结果同步,但是当新的线程完成"写文件任务"后,再发送过来,此时异步函数调用方对象是否还存在,这就是个需要解决的问题,这也就是为什么需要保证对象的生命周期。 更加直白一点的例子,假设你需要做下面的操作: io_service service;