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

shared_ptr<int> to an element of an array (shared_ptr<int[]>)

我目前正在学习智能指针,我在从 "normal" 指针转换时遇到了一些问题。 我想知道是否可以从指向 shared_ptr 数组中的元素的函数中 return a shared_ptr?

在主函数中我声明了一个整型数组:

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

我想创建的函数 return 一个 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 的首选方式?

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

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

注意共享指针不能直接使用下标运算符。您需要先间接它,以便下标运算符适用于数组:(*arr)[i]