我正在开发一个具有高性能和内存需求的应用程序.我的意思是80核和500 GB的RAM.为了节省一些内存,我使用自己的动态数组(16 B开销)而不是std::vector(24 B开销),如果你有数十亿的话,这很重要.我的问题涉及扩展看起来像这样的数组:
//private
template <class ArrType>
void DynamicArray<ArrType>::reallocate(unsigned newCapacity) {
if (newCapacity < _size) return;
if (capacity == newCapacity) return;
ArrType * newArray = new ArrType[newCapacity];
capacity = newCapacity;
//for (unsigned i = 0; i < _size; i++) {
// newArray[i] = array[i];
//}
memcpy(newArray, array, _size * sizeof(ArrType));
if(array) delete [] array;
array = newArray;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,非常标准的重新分配,但我进行了测试memcpy,它比使用for循环快了大约10倍.问题是当我调用时delete,它会调用析构函数来获取对象ArrType,这在ArrType有自己的动态分配时就会出现问题.副本newArray将使用已删除的内存.有没有办法删除旧数组而不调用析构函数?