new 关键字没有什么不好,它总是在动态空间分配的底部,即使你使用std::vector<>
和朋友。std::unique_ptr
等等也有他们的问题。但这不是,我的回答是关于什么。
我的回答是关于出于性能原因需要避免的情况new
(这是一个非常昂贵的操作符,需要几百个周期)。
您通常可以避免逐行分配数组,只需一次性分配所有数组,然后手动构建所需的指针结构:
size_t fieldSize = width*height*sizeof(int);
size_t pointerArraySize = height*sizeof(int*);
char* memory = new char[fieldSize + pointerArraySize];
int** pointerArray = (int**)memory;
int* dataArray = (int*)&memory[pointerArraySize];
for(long i = height; i--; ) pointerArray[i] = &dataArray[i*width];
好的,这比进行许多单独的分配要麻烦一些,但要快得多。而且,作为奖励,释放是单行的:
delete[] (char*)pointerArray;