我目前正在学习智能指针,我在从“普通”指针转换时遇到了一些困难。我想知道是否有可能从指向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的首选方式?
发布于 2019-03-07 18:56:58
您需要使用别名构造函数,以便保持所有权关系:
shared_ptr<int> returnPointer{arr, *arr + smallestIndex};请注意,不能对共享指针直接使用下标运算符。您需要先间接转换它,以便下标操作符应用于数组:(*arr)[i]
https://stackoverflow.com/questions/55050879
复制相似问题