c++ - 所有shared_ptr都引用我的 vector 中的同一个指针

标签 c++ class vector shared-ptr make-shared

我创建了一个 shared_ptr 类 (_cells) 的 vector 。

class Goban
{
  public:
    Goban();
    ~Goban();
  private:
    vector<vector<shared_ptr<Cell>>> _cells;
};

我这样初始化:

Goban::Goban() : _cells(18, vector<shared_ptr<Cell>>(18, make_shared<Cell>()))
{
}

问题是所有指针动态引用同一个指针(如果我理解正确的话)。 因此,当我使用 vector 更改单元类中的元素时,它会更改所有其他元素。

最佳答案

The problem is all pointers refer to the same pointer dynamically

这是因为您使用了 vector 的构造函数来制作值参数的 N 个拷贝。共享指针的拷贝指向共享对象。

I want separate pointer

那么不要使用 vector 的构造函数。您可以编写一个调用 make_shared 的循环来创建每个元素,并编写一个循环来为每个 vector 重复该操作。

关于c++ - 所有shared_ptr都引用我的 vector 中的同一个指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58759332/

相关文章:

python - "classes themselves are objects"是什么意思?

c++ - 可从多个文件和函数访问的类值 c++

c++ - 有效地对定义顺序的 vector 子集进行排序

c++ - 函数返回中const T&和T的区别

c# - Win32 笔模拟不适用于 InjectTouchInput()

c++ - C++构造对象时提供PV函数内容

c++ - while(sline >> n >> c && c== ',' ) 背后的逻辑是什么?

c++ - 在 C++ 中使用成员函数 vector 时,有没有办法实现协变返回类型?

c++ - 创建自定义#warning 标志

c++ - 在基类中使用派生类的常量