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 ++函数都使用第二种变体.第一个变体更舒适(在我看来).但第二个也有一些优点(你在同一个块中分配和删除内存).
也许这是一个愚蠢的问题,但什么变体更好,为什么?
第三种变体
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)