将 unique_ptr<int[]> 传递给函数
Passing unique_ptr<int[]> to a function
#include <iostream>
#include <memory>
std::unique_ptr<int[]> addElement(int *myNumbers, int sizeOfArray);
void printArray(int * arr_ptr, int sizeOfArray);
int main()
{
const int SIZE = 5;
int myNumbers[SIZE] = {18, 27, 3, 14, 95};
std::unique_ptr<int[]> newCopy(new int[SIZE]);
newCopy = addElement(myNumbers, SIZE);
std::cout << "myNumbers: ";
printArray(myNumbers, SIZE);
std::cout << "newCopy: ";
printArray(newCopy, SIZE + 1);
return 0;
}
std::unique_ptr<int[]> addElement(int *myNumbers, int sizeOfArray)
{
std::unique_ptr<int[]> newArray(new int[sizeOfArray + 1]);
newArray[0] = 0;
for(int i = 0; i < sizeOfArray; i++)
{
newArray[i + 1] = myNumbers[i];
}
return newArray;
}
void printArray(int * arr_ptr, int sizeOfArray)
{
for(int i = 0; i < sizeOfArray; i++)
{
std::cout << arr_ptr[i] << ' ';
}
std::cout << std::endl;
}
尝试调用 printArray(newCopy, SIZE + 1);
时出现编译错误 cannot convert 'std::unique_ptr<int []>' to 'int*' for argument '1' to 'void printArray(int*, int)'
我在这里阅读了几个类似的问题,但我似乎无法找到将 int[]
和 unique_ptr<int[]>
传递给 printArray
函数的解决方案。
std::cout << "newCopy: ";
for(int i = 0; i < SIZE + 1; i++)
{
std::cout << newCopy[i] << ' ';
}
做我想做的事
std::cout << "newCopy: ";
printArray(newCopy, SIZE + 1);
要做
When trying to call printArray(newCopy, SIZE + 1);
I get the compiler error cannot convert 'std::unique_ptr<int []>' to 'int*' for argument '1' to 'void printArray(int*, int)'
这是因为您试图将 std::unique_ptr<int []>
对象传递给一个需要 int*
的函数。但是 std::unique_ptr<int []>
是不同于 int*
的类型,并且不可隐式转换。
解决方案:您应该改为传递 int*
。 std::unique_ptr
只是裸指针的包装器。如果你看一下 std::unique_ptr
的文档,你会发现它有一个成员函数 std::unique_ptr::get
that
returns a pointer to the managed object
#include <iostream>
#include <memory>
std::unique_ptr<int[]> addElement(int *myNumbers, int sizeOfArray);
void printArray(int * arr_ptr, int sizeOfArray);
int main()
{
const int SIZE = 5;
int myNumbers[SIZE] = {18, 27, 3, 14, 95};
std::unique_ptr<int[]> newCopy(new int[SIZE]);
newCopy = addElement(myNumbers, SIZE);
std::cout << "myNumbers: ";
printArray(myNumbers, SIZE);
std::cout << "newCopy: ";
printArray(newCopy, SIZE + 1);
return 0;
}
std::unique_ptr<int[]> addElement(int *myNumbers, int sizeOfArray)
{
std::unique_ptr<int[]> newArray(new int[sizeOfArray + 1]);
newArray[0] = 0;
for(int i = 0; i < sizeOfArray; i++)
{
newArray[i + 1] = myNumbers[i];
}
return newArray;
}
void printArray(int * arr_ptr, int sizeOfArray)
{
for(int i = 0; i < sizeOfArray; i++)
{
std::cout << arr_ptr[i] << ' ';
}
std::cout << std::endl;
}
尝试调用 printArray(newCopy, SIZE + 1);
时出现编译错误 cannot convert 'std::unique_ptr<int []>' to 'int*' for argument '1' to 'void printArray(int*, int)'
我在这里阅读了几个类似的问题,但我似乎无法找到将 int[]
和 unique_ptr<int[]>
传递给 printArray
函数的解决方案。
std::cout << "newCopy: ";
for(int i = 0; i < SIZE + 1; i++)
{
std::cout << newCopy[i] << ' ';
}
做我想做的事
std::cout << "newCopy: ";
printArray(newCopy, SIZE + 1);
要做
When trying to call
printArray(newCopy, SIZE + 1);
I get the compiler errorcannot convert 'std::unique_ptr<int []>' to 'int*' for argument '1' to 'void printArray(int*, int)'
这是因为您试图将 std::unique_ptr<int []>
对象传递给一个需要 int*
的函数。但是 std::unique_ptr<int []>
是不同于 int*
的类型,并且不可隐式转换。
解决方案:您应该改为传递 int*
。 std::unique_ptr
只是裸指针的包装器。如果你看一下 std::unique_ptr
的文档,你会发现它有一个成员函数 std::unique_ptr::get
that
returns a pointer to the managed object