【发布时间】:2020-10-24 07:42:31
【问题描述】:
我有一个std::unique_ptr<k_ctrl_t> 的向量,我想将这个向量中的unique_ptr 的引用传递给另一个函数:
std::vector<std::unique_ptr<k_ctrl_t>> _kitchens;
for (int i = 0; i < (int)_kitchens.size(); i++)
{
if (FD_ISSET(_kitchens[i]->socket, &this->_readfds))
{
handleKitchenRet(std::cref<std::unique_ptr<k_ctrl_t>>(_kitchens[i]));
}
}
void Reception::handleKitchenRet(std::unique_ptr<k_ctrl_t> kitch)
{
...
}
但这不起作用。我怎么能这样做?
错误信息:
错误:使用已删除的函数 'std::unique_ptr<_tp _dp>::unique_ptr(const std::unique_ptr<_tp _dp>&) [with _Tp = kitchen_control_s; _Dp = std::default_delete【问题讨论】:
-
Reception::handleKitchenRet(std::unique_ptr<k_ctrl_t> kitch)- 参考在哪里?与此相关的是,导致您悲伤的错误消息在哪里,但无论出于何种原因您选择不包含在您的帖子中? -
您正在尝试制作
std::unique_ptr的副本,正如“独特”的名称所暗示的那样,这是不可能的。你想做什么?handleKitchenRet是否应该通过引用而不是值来获取 unique_ptr 参数? -
你可以尝试使用
std::move,或者你可以用shared_ptr修改unique_ptr -
Herb Sutter 会推荐
void Reception::handleKitchenRet(k_ctrl_t const& kitch)、void Reception::handleKitchenRet(k_ctrl_t& kitch)或void Reception::handleKitchenRet(k_ctrl_t const* kitch)或void Reception::handleKitchenRet(k_ctrl_t* kitch)。如果您要传递所有权,则只有unique_ptr作为参数。