如何从没有复制构造函数的函数返回一个类?

时间:2013-04-02 18:10:25

标签: c++ boost boost-asio smart-pointers copy-constructor

我正在使用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;
}

如果可以在没有指向它的情况下返回类,我仍然很好。

1 个答案:

答案 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_ptrstd::unique_ptr也可以。