修改继承的成员变量不会影响基类

时间:2019-07-24 05:10:28

标签: c++ class c++11 stdbind

我有以下两个课程:

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()尚未修改其值。为什么会这样?

1 个答案:

答案 0 :(得分:4)

std::bind按值获取其参数,因此您正在复制*b的副本。

您需要通过std::ref传递原始对象:

auto func = std::bind(&B::set, std::ref(*b));

Live demo

或更简单的形式就是将指针传递到bind

auto func = std::bind(&B::set, b);