我正在使用boost Asio,以下函数无法编译。
udp::resolver Create_UDP_Socket(){
boost::asio::io_service io_service;
udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
udp::resolver resolver(io_service);
return resolver;
}
错误:使用已删除的功能
升压:: ASIO :: IP :: basic_resolver :: basic_resolver(常量 提高:: ASIO :: IP :: basic_resolver&安培;)
返回解析器的最佳方法是什么?我可以用移动语义做些什么,或者我应该指向解析器并返回它? (什么样的:共享/独特?)
修改: 这有效:
std::shared_ptr<udp::resolver> Create_UDP_Socket(){
boost::asio::io_service io_service;
udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
std::shared_ptr<udp::resolver> resolver(new udp::resolver{io_service});
return resolver;
}
如果可以在没有指向它的情况下返回类,我仍然很好。
答案 0 :(得分:4)
您可以通过将智能指针返回到一个对象来避免复制对象。
boost::shared_ptr<udp::resolver> Create_UDP_Socket(){
boost::asio::io_service io_service;
udp::socket s(io_service, udp::endpoint(udp::v4(), 0));
return boost::shared_ptr<udp::resolver>( new resolver(io_service) );
}
std::shared_ptr
或std::unique_ptr
也可以。