Возможно, это кандидат для однострочного ответа. Я бы все равно хотел это знать ..
Я пишу простой циклический буфер и по некоторым причинам, которые не важны для вопроса, мне нужно реализовать его, используя массив значений типа 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)
Мне требуется, чтобы размер был как минимум один, хотя буфер размером один фактически больше не является буфером. Конечно, вместо этого было бы лучше использовать простой double, но в любом случае.
Теперь при удалении внутреннего буфера в деструкторе - или в функции resize в этом отношении - мне нужно удалить выделенную память. Вопрос в том, как? Первый кандидат, конечно, delete[] buffer;
, но с другой стороны, если я выделил буфер размером один, то есть если указатель был получен с помощью buffer = new T[0]
, все еще уместно вызвать delete[]
для указателя или мне нужно позвонить delete buffer;
(без скобок)?
Спасибо,
Arne