代码之家  ›  专栏  ›  技术社区  ›  perreal

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

  •  0
  • perreal  · 技术社区  · 10 年前

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

    int **getIterator(std::unique_ptr<int>& p)
    {
         /* error: lvalue required as unary ‘&’ operand */
         return &p.get();
    }
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Mateusz Grzejek    10 年前

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

    您正在使用 std::unique_ptr<int> 。如果我正确理解了你的问题,你正在尝试做一些事情,在这种情况下这是不必要的:如果你想迭代 int s、 你需要 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);
    

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