共享指针数组的共享指针

时间:2018-02-11 11:49:29

标签: c++11 shared-ptr

我定义了一个名为table的共享指针数组,如下所示;现在我想让这个表成为一个共享指针。但是我不知道该怎么做。我对此给予了适当的帮助。

class Reference {
public:
  int ref;
    Reference (int r)
  {
    ref = r;
  }
   ~Reference ()
  {
    cout << "destructor " << endl;
  }
};

class segment
{
public:
  std::shared_ptr < Reference > *table;
  segment ()
  {
    table = new std::shared_ptr < Reference >[SIZE];
    for (int i = 0; i < SIZE; i++)
      {
        table[i] = std::make_shared < Reference > (i);
      }
  }

};

1 个答案:

答案 0 :(得分:0)

好吧,我会说那个

您可能根本不需要类segment中的共享指针。

您的table字段是一个固定大小的区域(SIZE)。如果你担心它的生命周期 - 只需考虑segment实例的生命周期。您可以使用共享指针(即my_segment = std::make_shared<segment>())实例化,然后在超出范围后传递它

现在,至于多个共享指针是table的内容:你正在创建它们,当你销毁segment时,它们可能会完全消除它们。除非你把segment想象成一种“开胃小菜”的盘子,否则其他人会复制不同的共享指针,那么你就把它扔掉;事实并非如此,是吗?假设不是,只需要Reference table[SIZE]成员,并完成它。

注意:

  • 你的代码实际上有一个表是指向共享ptrs的原始指针,这可能不是你的意思,因为那不是make_shared给你的。
  • 您没有多说Reference类型的内容。这也可能对这个答案产生影响;我忽略了它的暗示名称。