使用 delete [] 运算符取消分配 class 中数据成员的内存

Using delete [] operator to de-allocate memory of data member in class

我的 Array class.

中有以下数据成员

private: Point* m_data; int m_array_size; 我想为此 class 实现一个复制构造函数,如下所示:

Array(const Array &a)

里面的实现。我有以下内容。

Array::Array(const Array &a) : m_array_size(a.m_array_size) {
    delete[] m_data;
    m_data = new Point[m_array_size]

    for(int i = 0; i < m_array_size; i++) {
        m_data[i] = a.m_data[i];
    }
}

我收到一个分段错误错误,我怀疑这是由于 delete[] 操作引起的。但是,我看不出我在这里做错了什么。我只是取消分配与 m_data 关联的内存并为其重新分配新内存。

我不确定以下内容是否相关,但由于我在数组 class 中使用自定义对象作为数据成员,这里是来自 class 的重载赋值运算符.

Point& Point::operator = (const Point &source) {

    if(this == &source) return *this;

    m_x = source.m_x;
    m_y = source.m_y;

    return *this;
}

您的复制构造函数尝试 delete[] m_data 成员,但从未对其进行初始化。将未初始化的指针传递给 deletedelete[] 是未定义的行为。未初始化指针值的大多数其他用途也是 UB。

因为这是构造函数,所以完全没有必要 delete[] 任何东西。只需删除该行即可。

另一方面,在复制赋值运算符中,您必须记住 delete[] 现有数组。