从函数中获取输出动态分配数组的更好变体?

Vit*_*ski 2 c++ pointers memory-management

这是两个变种.第一:

int n = 42;

int* some_function(int* input)
{
    int* result = new int[n];
    // some code
    return result;
}

int main()
{
    int* input = new int[n];
    int* output = some_function(input);

    delete[] input;
    delete[] output;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里函数返回在函数内部分配的内存.

第二种变体:

int n = 42;

void some_function(int* input, int* output)
{
    // some code
}

int main()
{
    int* input = new int[n];
    int* output = new int[n];
    some_function(input, output);

    delete[] input;
    delete[] output;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里的内存是在函数外部分配的.

现在我使用第一个变体.但我知道很多内置的c ++函数都使用第二种变体.第一个变体更舒适(在我看来).但第二个也有一些优点(你在同一个块中分配和删除内存).

也许这是一个愚蠢的问题,但什么变体更好,为什么?

Ale*_*tov 6

第三种变体

const int n = 42; 

template<class It1, class It2>
void some_function(It1 First, It1 Last, It2 output) 
{ 
    // some code 
} 

void main() 
{ 
    std::vector<int> input(n);
    std::vector<int> output(n);
    some_function(input.begin(), input.end(), output.begin()); 

} 
Run Code Online (Sandbox Code Playgroud)