解引用的unique_ptr和更改struct中的值不粘

时间:2019-07-18 00:46:54

标签: c++ c++14 unique-ptr

我正在尝试学习C ++的基础知识,就像每个人学习指针一样困难。

因此,我正在尝试C ++ 14 std::unique_ptr类,这可能是一个愚蠢的问题。

#include <iostream>
#include <memory>

struct Foobar {
    bool active = false;   
};

int main()
{
  std::unique_ptr<Foobar> foobar = std::make_unique<Foobar>();

  Foobar foo = *foobar;
  foo.active = true;

  Foobar bar = *foobar;

  // prints zero and not one
  std::cout << bar.active << std::endl;
}

取消引用我的指针并更改结构中的bool不会更改内存中的实际基础值。为什么会这样?

我缺少什么基本的东西?

1 个答案:

答案 0 :(得分:2)

Foobar foo = *foobar;
foo.active = true;

这将复制foobar所引用的对象,并将其存储在名为foo的新变量中;然后修改foo的{​​{1}}标志。

当然,这对active引用的(仍然)原始对象绝对没有任何作用。

然后,代码将复制该对象,并打印其foobar标志的未修改值。