无法将可移动对象与Boost.Asio一起使用

Cannot use movable objects with Boost.Asio

本文关键字:Asio 一起 Boost 可移动 对象      更新时间:2023-10-16

读到这篇文章,我觉得这段代码应该可以工作:

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标头之前,需要定义BOOST_ASIO_HAS_MOVE。如果不这样做,移动支持将被禁用。参见asio/basic_stream_socket.hpp

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