【发布时间】:2020-07-02 18:45:52
【问题描述】:
如果我有一个动态分配的数组char* arr = new char[100];。
1:如果我想保留数组的前半部分并释放最后 50 个,我该怎么做。
所以我基本上得到了相同的指针,但我得到的好像我做了char* arr = new char[50]。
2:如果我想保留数组的后半部分并释放前 50 个,我该怎么做。
所以我基本上得到了原始指针加上 50,但我得到的好像我做了char* arr = new char[50]。
我可以做delete[99] arr; 并把它放在一个循环中。我可以通过重新分配数组来做到这一点,但我希望它尽可能快。
请不要在拼写和语法问题上纠缠我,我知道我需要在这方面做得更好。
【问题讨论】:
-
如果快速是您最关心的问题,为什么在您仍然需要另一半的时候释放一半的数组?
-
您不能释放分配的一部分。要么全有,要么全无。您能做的最好的事情是获得较小的分配并将您需要的内容复制到新分配中,或者让一半的分配未使用。
-
因为我正在制作一个任意精度的整数库,如果我想移位超过 64 位,我需要移位四字(uint64_t),如果我移动指针它比重新移动要快分配,但如果我移动指针,就会忘记内存
-
注意:不要混用
realloc和new。 That way lies madness.
标签: c++ arrays c++11 memory-management