使用 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
成员,但从未对其进行初始化。将未初始化的指针传递给 delete
或 delete[]
是未定义的行为。未初始化指针值的大多数其他用途也是 UB。
因为这是构造函数,所以完全没有必要 delete[]
任何东西。只需删除该行即可。
另一方面,在复制赋值运算符中,您必须记住 delete[]
现有数组。
我的 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
成员,但从未对其进行初始化。将未初始化的指针传递给 delete
或 delete[]
是未定义的行为。未初始化指针值的大多数其他用途也是 UB。
因为这是构造函数,所以完全没有必要 delete[]
任何东西。只需删除该行即可。
另一方面,在复制赋值运算符中,您必须记住 delete[]
现有数组。