我目前正在学习智能指针,从“普通”指针过渡时遇到一些麻烦。 我想知道是否有可能从指向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的首选方式?
答案 0 :(得分:3)
您需要使用别名构造函数,以便维护所有权关系:
shared_ptr<int> returnPointer{arr, *arr + smallestIndex};
请注意,不能直接将下标运算符与共享指针一起使用。您需要先对其进行间接操作,以便下标运算符应用于数组:(*arr)[i]