我有以下两个课程:
class A
{
public:
A() : value(false) {}
bool get() const
{
return value;
}
protected:
bool value;
};
class B : public A
{
public:
void set()
{
value = true;
}
};
现在我按如下方式使用它们:
B* b = new B;
std::shared_ptr<A> a(b);
auto func = std::bind(&B::set, *b);
std::cout << a->get() << std::endl;
func();
std::cout << a->get() << std::endl;
我希望a->get()
在第二次调用时返回true
,但是func()
尚未修改其值。为什么会这样?
答案 0 :(得分:4)
std::bind
按值获取其参数,因此您正在复制*b
的副本。
您需要通过std::ref
传递原始对象:
auto func = std::bind(&B::set, std::ref(*b));
或更简单的形式就是将指针传递到bind
:
auto func = std::bind(&B::set, b);