在作为参数传递的数组上使用 delete[]

Using delete[] on an array passed as an argument

假设您想在 C++ 中创建一个 realloc 函数。我想它可以像这样工作:

template<typename T>
void realloc(T** arr, int size, int original_size){
  T *newArr = new T[size];
  for(int i = 0; i<original_size;i++)
    newArr[i] = (*arr)[i];
  delete[] *arr;
  *arr = newArr;
}

现在我的问题是在这里使用delete[]是否正确?据我所知,分配的内存大小是在运行时跟踪的,因此 C++ 知道要删除多少。像这样传递它时是否保留了它,或者有更好的方法吗?

Now my question is wheter it is correct to use delete[] here?

可以,只要 *arr 是使用 new[] 分配的。

From what I know allocated memory size is tracked at runtime so C++ knows how much to delete. Is that preserved when passing it like this [...]?

我不太确定你在这里的意思。运行时跟踪内存分配,是的。但是你必须明确使用 delete[] 数组(如 new int[10])delete 用于 non-arrays(如 new MyClass())。

or are there better ways of doing this?

应该避免使用原始指针,即使是裸指针 new 现在也被认为是不好的做法。智能指针和像 std::vector 这样的 STL-containers 是几乎所有场景的绝佳选择。