如何返回指向unique_ptr包装指针的指针

时间:2015-03-30 13:12:17

标签: c++ smart-pointers unique-ptr

如何创建指向包含在unique_ptr中的指针的指针?换句话说,是否有一种合理的方式来编写这个函数:

int **getIterator(std::unique_ptr<int>& p)
{
     /* error: lvalue required as unary ‘&’ operand */
     return &p.get();
}

1 个答案:

答案 0 :(得分:1)

  

我想返回一个指针,用作具有期望迭代器的接口的迭代器。我想传递algo(getIterator(X),getIterator(X)+1),以便单个项看起来像集合。

您正在使用std::unique_ptr<int>。如果我正确理解你的问题,那你就是在尝试做一些事情,在这种情况下是不必要的:如果你想要遍历int,你需要int*(指向对象的指针),而不是{ {1}}(指向指针的指针)。

使用此:

int**

然后,你可以做你想做的事:

int* getIterator(std::unique_ptr<int>& p)
{
     return p.get();
}

我希望algo(getIterator(X), getIterator(X) + 1); 的定义与此相似:

algo

如果您执行以下操作:

template <class Iter>
Result_type algo(Iter begin, Iter end)
{
  //algorithm
}

您将收到两个std::unique_ptr<int> p = /* initialize */; algo(getIterator(p), getIterator(p) + 1); 类型的参数,可以安全地向前/向后移动并取消引用以获取当前对象的值。