我需要使用 unique_ptr 而不是 std::function

Do I need to use unique_ptr over std::function

我有一个工厂return正在执行数据处理功能

class Factory {
    function<void(Data&)> build();
} 

现在我正在纠结 return 类型应该是 function<void(Data&)> 还是 unique_ptr<function<void(Data&)>>。换句话说,std 函数有多重,可以复制它还是使用智能指针管理它更好?

std::function 使用某种形式的 类型擦除 ,因此,它本身不应该太大。例如,在我使用 GCC 和 libstdc++ 的实验中,我尝试的 std::function 的所有实例都有 32 个字节:live demo。因此,移动 std::function 对象应该相对便宜(复制 可能是另一回事)。

无论如何,std::unique_ptr 仍然更小(通常是原始指针的大小),因此,它将在汇编级别移动得更快。它是否重要是一个分析问题。