修改继承的成员变量不影响基class
Modifying an inherited member variable does not affect base class
我有以下两个类:
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()
变为 return true
,但是 func()
没有修改它的值。这是为什么?
std::bind
按值获取其参数,因此您正在对 *b
.
的副本进行操作
您需要通过 std::ref
:
传递原始对象
auto func = std::bind(&B::set, std::ref(*b));
或者更简单的形式是将指针传递给 bind
:
auto func = std::bind(&B::set, b);
我有以下两个类:
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()
变为 return true
,但是 func()
没有修改它的值。这是为什么?
std::bind
按值获取其参数,因此您正在对 *b
.
您需要通过 std::ref
:
auto func = std::bind(&B::set, std::ref(*b));
或者更简单的形式是将指针传递给 bind
:
auto func = std::bind(&B::set, b);