如何返回指向unique_ptr换行指针的指针

How to return a pointer to a unique_ptr wrapped pointer

本文关键字:指针 unique ptr 换行 何返回 返回      更新时间:2023-10-16

如何创建指向封装在unique_ptr中的指针的指针?换句话说,有没有一种合理的方法来编写这个函数:

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

我想返回一个指针,用作迭代器,该迭代器的接口需要迭代器。我想传递algo(getIterator(X),getIterater(X)+1),使单个项目看起来像集合。

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

您将收到两个类型为int*的参数,它们可以安全地向前/向后移动并取消引用以获得当前对象的值。