gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:59:50 25 4
gpt4 key购买 nike

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

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

最佳答案

您可以通过将智能指针返回到一个对象来避免复制对象。

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 也可以。

关于c++ - 我如何从没有复制构造函数的函数返回一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com