我必须使用c风格的数组。
在下面的示例中,我的意思是oldArray
包含T&#39。
T *newArray = new T[newCount];
if (oldArray) {
std::copy(oldArray, oldArray + std::min(oldCount, newCount), newArray);
delete[] oldArray;
}
假设oldArray是一个实例变量,我想重新生成它。这段代码给了我指向新增数组的指针,但如果我删除oldArray,我就不能再使用它了:(
答案 0 :(得分:2)
我想你的意思是你不能在下一个代码中使用NAME oldArr。如果我理解你,我会为你提供下一个解决方案。您需要创建重新生成功能(" realloc"在我的代码中),然后在主代码中需要重新分配指针。
class T {
public:
int x;
};
T* realloc( T* oldArray, int oldCount, int newCount ){
T *newArray = new T[newCount];
if (oldArray) {
std::copy(oldArray, oldArray + std::min(oldCount, newCount), newArray);
delete[] oldArray;
}
return newArray;
}
void main()
{
int arr_size = 2;
T* arr = new T[ arr_size ];
arr[0].x = 10;
arr[1].x = 20;
std::cout<<"arr[0]="<<arr[0].x<<", arr[1]="<<arr[1].x<<"\n";
int arr_new_size = 3;
arr = realloc( arr, arr_size, arr_new_size );
arr[2].x = 30;
std::cout<<"arr[0]="<<arr[0].x<<", arr[1]="<<arr[1].x<<", arr[2]="<<arr[2].x;
}
答案 1 :(得分:0)
如果我正确理解了问题,您可以按原样使用参考中的函数。
oldArray = GrowArray(oldArray, oldCount, newCount);
可以将其修改为使用本地临时,然后使用std::swap
,但这在很大程度上取决于使用它的上下文。