1

我用的是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;
}

错误:使用已删除的功能

boost::asio::ip::basic_resolver::basic_resolver(const boost::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;
}

我仍然很好奇是否可以在不指向该类的情况下返回该类。

4

1 回答 1

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) );
}

A std::shared_ptrorstd::unique_ptr也可以。

于 2013-04-02T18:36:09.277 回答