int* test();
但使用向量会“更C++”:
std::vector< int > test();
EDIT
我会澄清一些问题。既然你提到了C++,我就选择new[]
and delete[]
运算符,但与 malloc/free 相同。
在第一种情况下,您将编写如下内容:
int* test() {
return new int[size_needed];
}
但这不是一个好主意,因为你的函数的客户端并不真正知道你返回的数组的大小,尽管客户端可以通过调用来安全地释放它delete[]
.
int* theArray = test();
for (size_t i; i < ???; ++i) { // I don't know what is the array size!
// ...
}
delete[] theArray; // ok.
更好的签名是这样的:
int* test(size_t& arraySize) {
array_size = 10;
return new int[array_size];
}
您的客户端代码现在是:
size_t theSize = 0;
int* theArray = test(theSize);
for (size_t i; i < theSize; ++i) { // now I can safely iterate the array
// ...
}
delete[] theArray; // still ok.
由于这是C++,std::vector<T>
是一种广泛使用的解决方案:
std::vector<int> test() {
std::vector<int> vector(10);
return vector;
}
现在你不必打电话delete[]
,因为它将由对象处理,并且您可以使用以下方法安全地迭代它:
std::vector<int> v = test();
std::vector<int>::iterator it = v.begin();
for (; it != v.end(); ++it) {
// do your things
}
这更容易、更安全。