gpt4 book ai didi

c++ - 数组作为函数的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 15:43:48 28 4
gpt4 key购买 nike

有没有办法在 C++ 中作为函数的结果返回一个数组?

int* returnArray()
{
int* arr = new int[3];
return arr;
}

这样arr是一个局部变量,分配的内存块在函数返回后丢失。除了在函数 block 外定义一个数组之外,还有什么办法可以解决这个问题吗?

最佳答案

分配的内存块不会丢失,因为内存是在堆上分配的。指向此内存的指针被复制,并正确返回给调用者。换句话说,您的代码没有任何问题 - 除了调用者必须知道数组大小才能对返回的数组执行任何有用的操作之外。

您可能指的反模式如下所示:

// WRONG: returns pointer to local data
int* returnArray() {
int arr[3] = {1, 2, 3};
return arr;
}

这是一个错误,因为 arr分配在堆栈上,函数返回指向该数据的指针。要修复它,需要将函数声明为返回数组,但 C++ 不允许这样做,因此必须间接完成。固定函数将如下所示:

struct Array {
int array[3];
};

// correct: generated copy constructor correctly copies arr
Array returnArray() {
Array arr = {{1, 2, 3}};
return arr;
}

在生产代码中,如果您可以使用 C++11,您的函数将简单地返回 std::array<int, 3> . C 风格的数组几乎总是用在低级代码中来实现容器,而且几乎从来不需要直接从函数中返回它们。

关于c++ - 数组作为函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19954132/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com