需求
A类掌握资源,使用 shared_ptr
来指向资源。其他 B,C,D 类使用资源,在构造函数中使用 weak_ptr
作为引用参数来接收资源指针。但是编译是会报错,报错信息: error: cannot bind non-const lvalue reference of type ‘std::weak_ptr<>&’ to an rvalue of type ‘std::weak_ptr<>’
解决
解决办法很简单,在构造函数的参数 weak_ptr
前面加上 const.
std::unique_ptr<CommandProcess> process_;
std::shared_ptr<MessageQueue> send_;
process_ = make_unique<CommandProcess>(send_);
CommandProcess::CommandProcess(const weak_ptr<MessageQueue>& send) : send_(send)
{
}
参考
GotW #91 Solution: Smart Pointer Parameters
C++11:再谈shared_ptr,以及shared_ptr参数传递以及构造细节
C++非const引用问题:error: cannot bind non-const lvalue reference of type
【报错】关于{Error} cannot bind non-const lvalue reference of type ‘std::String&‘ to an rvalue……的一个解决方案