c++ - 删除大小为 1 的数组

标签 c++ memory-management

这可能是一个单行答案的候选者。无论如何我都想知道..

我正在编写一个简单的循环缓冲区,出于某些对问题不重要的原因,我需要使用 double 组来实现它。事实上,我还没有研究其他方法来做到这一点,但由于无论如何都需要一个数组,所以我没有花太多时间寻找替代方案。

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

因为我需要动态调整缓冲区大小,所以 buffer_size 既不是 const 也不是模板参数。现在的问题:

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

现在,当在析构函数中删除内部缓冲区时 - 或者在函数调整大小时 - 我需要删除分配的内存。问题是,如何?第一个候选者当然是 delete[] buffer; 但是话又说回来,如果我分配了一个大小为 1 的缓冲区,也就是说,如果指针是通过 buffer = new T[0],在指针上调用 delete[] 是否仍然合适,还是我需要调用 delete buffer;(不带括号)?

谢谢, 阿恩

最佳答案

如果你用new T[x]分配内存,你总是用delete[]删除它,即使x≤1。

关于c++ - 删除大小为 1 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2989016/

相关文章:

c++ - cocoa : How to detect touch input inside of a area/layout

json - 使用 Echo 或 Gin 框架的大型数组的内存消耗

c++ - gcc下编译报错

C++ switch语句错误

c++ - 来自异步服务器的套接字写入 - 但不读取

c++ - 是否可以在其范围之外访问局部变量的内存?

iPhone内存管理(附具体例子/问题)

c++ - 在函数中绘制图像

C++ 编程 - 这种分配是不可避免的内存泄漏吗?

objective-c - Objective-C 中的内存管理和将指针设置为 nil