"delete [] element" 在给定的 c++ 代码中用于实现一维数组的目的是什么?

What's the purpose of "delete [] element" in the given c++ code for implementation of a 1D array?

以下代码用于在C++中实现一维数组。在函数中 Array1D<T>& operator=(const Array1D<T>& v); 书上有句delete [] element 说是用来释放旧的space 的,我不是很懂。谁能详细解释一下为什么我们需要这个表达式?

template<class T>
class Array1D
{
public:
Array1D(int Size=0);
Array1D(const Array1D<T>& v);
~Array1D(){delete [] element;}
T& operator[](int i)const;
int SizeFunction(){return Size;}
Array1D<T>& operator=(const Array1D<T>& v);
Array1D<T>& operator+()const;
Array1D<T>& operator+(const Array1D<T>& v);
Array1D<T>& operator-()const;
Array1D<T>& operator-(const Array1D<T>& v);
Array1D<T>& operator*(const Array1D<T>& v);
Array1D<T>& operator+=(const T& x);
private:
int Size;
T* element;
};


template<class T>
Array1D<T>& Array1D<T>::operator=(const Array1D<T>& v)
{
if(this!=&v)
{
    Size = v.Size;
    delete [] element; // What's the purpose of this expression?
    element = new T [Size];
    for(int i=0;i<Size;i++)
    {
        element[i]=v.element[i];
    }
}
return *this;
}

与其他一些语言不同,C++ 允许您更好地控制内存,但这意味着您也必须更加小心。

本质上,每次调用 'new' 时,您都在分配内存来保存您刚刚创建的新内容,在本例中是数组的元素。

一旦您使用完该内存,您需要告诉机器您不再需要它并且该内存现在 'free' 可用于其他用途。在这种情况下,有两种内存返回计算机的情况,第一种是在创建新数组之前突出显示数组正在被销毁的位置,第二种是在析构函数中,returns 所有内存用于数组本身被销毁时的数组元素。

作为所有 C++ 程序的基本规则,如果您 'new' 完成某项操作,那么您也应该 'delete' 完成它。