不负相思意
int* test();但使用向量将是“更多C ++”:std::vector< int > test();编辑我会澄清一些观点。既然你提到了C ++,我会new[]和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}这更容易,更安全。