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]
我目前正在学习智能指针,我在从 "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]