shared_ptr <int>到数组的元素(shared_ptr <int []>)

时间:2019-03-07 18:51:09

标签: c++ arrays shared-ptr

我目前正在学习智能指针,从“普通”指针过渡时遇到一些麻烦。 我想知道是否有可能从指向shared_ptr数组中的元素的函数中返回shared_ptr吗?

在主函数中,我声明了一个int数组:

shared_ptr<int[]> arr(new int[size]);

我要创建的函数将将shared_ptr返回到数组的最小元素:

shared_ptr<int> getSmallestElement(shared_ptr<int[]> arr, int size) {
    int smallestValue = arr[0], smallestIndex = 0;
    for (int i = 1; i < size; i++) {
        if (smallestValue > arr[i]) {
            smallestValue = arr[i];
            smallestIndex = i;
        }
    }
    // what would be the equivalent shared_ptr code for the code below?
    int *returnPointer = arr[smallestIndex];
    return returnPointer;
}

我得到的最接近的,但这是使用我的普通指针逻辑的:

  shared_ptr<int> returnPointer = arr.get() + smallestIndex;
  return returnPointer;

是否甚至可以使用shared_ptr做到这一点,还是使用unique_ptr的首选方式?

1 个答案:

答案 0 :(得分:3)

您需要使用别名构造函数,以便维护所有权关系:

shared_ptr<int> returnPointer{arr, *arr + smallestIndex};

请注意,不能直接将下标运算符与共享指针一起使用。您需要先对其进行间接操作,以便下标运算符应用于数组:(*arr)[i]