将unique_ptr <int []>传递给函数

时间:2016-12-04 23:43:28

标签: arrays function c++11 pointers unique-ptr

#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);

要做

1 个答案:

答案 0 :(得分:1)

  

尝试调用printArray(newCopy, SIZE + 1);时,我收到编译错误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

  

返回指向托管对象的指针