在作为参数传递的数组上使用 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 是几乎所有场景的绝佳选择。
假设您想在 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 是几乎所有场景的绝佳选择。