如无特殊情况,不要使用右值引用作为成员变量。
【 在 xunery (寻) 的大作中提到: 】
: 标 题: Re: 关于c++的右值引用的一个问题
: 发信站: 水木社区 (Fri Dec 18 10:34:30 2020), 站内
:
: 这不就是为了学习这块的语法知识吗?我觉得问题在
: template<class Function, class Callback>
: void enqueue(Function &&f, Callback &&callback, int priority = 5) {
:
: auto task = std::make_shared<std::function<void()>>(
: std::bind(__ThreadPoolImpl::runner_wrapper,
: std::make_shared<__ThreadPoolImpl::runner<Function, Callback>>(
: std::forward<Function>(f), std::forward<Callback>(callback))));
: //auto task = std::make_shared<std::function<void()>>(std::bind(std::forward<Callback>(callback), (std::forward<Function>(f))()));
: {
: std::lock_guard<std::mutex> lock(queue_mutex);
: tasks.emplace(priority, std::bind(__ThreadPoolImpl::task_wrapper, task));
:
: }
: condition.notify_one();
: }
:
:
: 不用右值,修改成 template<class Function, class Callback>
: void enqueue(Function f, Callback callback, int priority = 5)
: 也一样有错,但是这里到底哪错了
: 【 在 here080 的大作中提到: 】
: : 贴出来了个毛球。
: : 我还以为你用的啥正常的第三方库。
: : 结果是你们自己搞的小作坊ThreadPool,代码问题就出在那里面。各种滥用右值引用和shared_ptr
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 115.171.170.*]
--
FROM 76.126.252.*