删除大小为1的数组

Arn*_*rne 3 c++ memory-management

这可能是单行答案的候选人.无论如何我想知道..

我正在编写一个简单的循环缓冲区,由于某些原因,这对于我需要使用双精度数组实现它的问题并不重要.事实上,我没有研究其他方法,但是因为无论如何都需要阵列,所以我没有花太多时间寻找替代方案.

template<typename T>
class CircularBuffer
{
public:
    CircularBuffer(unsigned int size);
    ~CircularBuffer();
    void Resize(unsigned int new_size);
    ...
private:
    T* buffer;
    unsigned int buffer_size;
};
Run Code Online (Sandbox Code Playgroud)

由于我需要动态调整缓冲区大小,因此buffer_size既不const是模板参数也不是模板参数.现在的问题是:

在构造和功能期间,Resize(int)我只要求大小至少为1,尽管大小为1的缓冲区实际上不再是缓冲区.当然,使用简单的双重替代会更合适,但无论如何.

现在当在析构函数中删除内部缓冲区时 - 或者在函数调整大小时 - 我需要删除分配的内存.问题是,怎么样?第一个候选者当然是delete[] buffer;然后再次,如果我已经分配了一个大小为1的缓冲区,即如果指针被获取buffer = new T[0],是否仍然适合调用delete[]指针或我是否需要调用delete buffer;(没有括号)?

谢谢,阿恩

ken*_*ytm 10

如果使用分配内存,即使x≤1 new T[x],也始终将其删除delete[].


obe*_*lix 7

为什么不使用矢量?


sha*_*oth 5

仅用于delete[]返回的地址new[]- 无论缓冲区大小如何.delete在这种情况下使用是未定义的行为.