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

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

本文关键字:shared int gt lt ptr 数组 元素      更新时间:2023-10-16

我目前正在学习智能指针,并且从"正常"指针过渡时遇到了一些麻烦。我想知道是否可以将共享_ptr从指向共享_ptr数组中的元素的函数返回?

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

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

我想创建的功能将返回共享_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;

甚至可以使用共享_ptr进行此操作,还是使用unique_ptr的首选方式?

您需要使用混叠构造函数,以维持所有权关系:

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

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