代码之家  ›  专栏  ›  技术社区  ›  anio

促进asio和共享资源的扩散

  •  4
  • anio  · 技术社区  · 14 年前

    所以我的问题是,如果我使用boost来接受tcp连接,然后处理它们。只要我保证在堆上创建的对象(boost::asio::ip::tcp::socket,以及将为异步方法调用的类)在使用完tcp之前不会被删除,那么我就不需要共享ptr了,对吗?

    我编写了一个简单的tcp服务器和客户端,不使用共享ptr,它可以工作。但我只想得到一些外部的确认,证明我的评估是正确的。

    而且,根据你的经验,你有没有 需要 使用共享的ptr来安抚boost?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Sam Miller    14 年前

    阅读 documentation io_service 析构函数

    所描述的破坏顺序 他们的资源管理 共享的;。物体的位置 生命与 异步操作),一个共享的 对象将绑定到 所有异步处理程序 与之相关的操作。这个 工作如下:

    当一个连接结束时 关联的异步操作 完成。相应的处理程序 所有的东西都被摧毁了 对对象的共享引用

    关闭整个 程序,io U服务功能 调用stop()终止任何 尽快调用run()。这个 上面定义的io U服务析构函数 销毁所有处理程序,导致 所有共享的参考

    换句话说,使用 shared_ptr 而不是赤裸裸的指针。

        2
  •  1
  •   Billy ONeal IS4    14 年前

    shared_ptr ,或者类似的东西( vector , auto_ptr delete 调用代码时,可能会引发异常,从而导致跳过删除操作并泄漏内存。

    共享的 你看到的是因为有人想存储一个具有多态行为的对象,而不想受到切片问题的影响。

        3
  •  0
  •   Vinnie Falco    7 年前

    shared_ptr 通过保持你自己的参考计数。但你实际上是在重新实现同样的事情。这里的问题不是 共享的 但你的态度。您应该简单地接受引用计数对于异步代码是必需的,因此 是自然的解决方案。