c++ - 将 boost::asio tcp 示例移植到 C++11

标签 c++ boost c++11 visual-studio-2012 boost-asio

我正在使用来自 boost::asio 的简单 tcp 服务器,可以找到 here .

它运行良好(Boost 1.51,VC++ 2012)。

但是当我尝试更改 connection_ptr 的 typedef 时

typedef boost::shared_ptr<connection> connection_ptr;

typedef std::shared_ptr<connection> connection_ptr;

服务器仍然工作,但在连接完成后崩溃。它发生在 connection manager在方法 stop 中。

似乎删除 boost shared_ptr 是可行的,但是你不能删除 std shared_ptr 吗?为什么会这样?

最佳答案

关于你的评论

I removed this inheritance and simply pass a new instance of shared_ptr each time

不要这样做,这违背了 std::shared_ptr 的目的。您需要使用 std::enable_shared_from_thisshared_from_this() 来增加引用计数,创建具有相同指针的 shared_ptr 的另一个实例将只会导致问题,例如内存访问冲突。

关于c++ - 将 boost::asio tcp 示例移植到 C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764071/

相关文章:

c++ - 截断除前两位以外的整数的所有数字

c++ - Linux: C++:/usr/bin/ld: 找不到 -llibboost_serialization

c++读取具有不同文件名的图像集而无需硬编码

c++ - 为 Boost.Log 严重性记录器实例的接收器设置严重性过滤器

由 shared_ptr 管理的对象的 C++ 隐藏构造函数

c++ - emplace_back 和 VC++ 的挫败感

c++ - QML 组件和 QML 对象类型有什么区别?

c++ - CXX 编译器标识未知

c++ - boost 日志和严重性/本地属性

c++ - for循环c++中的结构