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

标签 c++ arrays shared-ptr

<分区>

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

在 main 函数中我声明了一个 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 是首选方式吗?

最佳答案

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

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

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

关于c++ - shared_ptr<int> 到数组的元素 (shared_ptr<int[]>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050879/

相关文章:

c++ - 我可以使用 std::shared_ptr 来包装 IOCP 中的每个 I/O 数据吗?

C++ 类输出

javascript - 使用过滤器和关键字搜索对象数组

c++ - 手动递增和递减 boost::shared_ptr?

c++ - 在 Eclipse 上启用 C++17 以使用 `std::byte`

c++ - 如何将 allegro5 库链接到 C++ 项目

javascript - 根据驻留在 Json 数组中的对象的 Json 值获取 Json 键

c# - 无论如何,是否有 DllImport 函数从作为字节数组加载到 RAM 中的 native dll?

c++ - 我如何将 boost::array 转换为 boost::shared_ptr

c++ - 异步、安全地使用 C++11 lambda