小编Mil*_*mek的帖子

删除数组而不调用析构函数

我正在开发一个具有高性能和内存需求的应用程序.我的意思是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将使用已删除的内存.有没有办法删除旧数组而不调用析构函数?

c++ arrays destructor memory-management c++11

1
推荐指数
1
解决办法
546
查看次数

标签 统计

arrays ×1

c++ ×1

c++11 ×1

destructor ×1

memory-management ×1