c++ - 不能在 Boost.Asio 中使用可移动物体

标签 c++ boost c++11 boost-asio

阅读 this ,我觉得这段代码应该有效:

class Connection : public std::enable_shared_from_this<Connection>
{
public:
    Connection(tcp::socket&& socket) : socket_(std::move(socket)) {}
private:
    tcp::socket socket_;
};

但是编译器在构造函数中发出这个错误:

Call to implicitly-deleted copy constructor of 'tcp::socket' (aka'basic_stream_socket<boost::asio::ip::tcp>')

我还定义了 BOOST_ASIO_HAS_MOVE 。我使用 Xcode 4.6.3,在编译器设置中我定义了这个:

C++ Language dialect: GNU++11[-std=gnu++11]
C++ Standard Library: libc++(LLVM C++ standard library with C++11 support)

最佳答案

在包含 ASIO header 之前,您需要定义 BOOST_ASIO_HAS_MOVE。如果不这样做,移动支持将被禁用。请参见 asio/basic_stream_socket.hpp

https://svn.boost.org/trac/boost/ticket/8959

关于c++ - 不能在 Boost.Asio 中使用可移动物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908369/

相关文章:

python - 如何在 C++ 中使用 ZeroMQ 传送多个图像?

c++ - 在拆分调用时 boost MPI block

c++ - 检测私有(private)成员的存在

c++ - 生成多维数组而不是 cout

c++ - 由于编译器优化,代码运行缓慢

c++ - 如何测试模板参数是否是一对关联容器?

c++ - 在运行时初始化一个 boost::accumulator_set

c++ - 具有多个函数的 Py_InitModule - 从 int 到 PyCFunction 的无效转换

c++ - 模板类中运算符 [] 的可变模板重载

C++,set_terminate 是每个线程的本地吗?