Mut*_*thm 1 c++ memory-management delete-operator
我Array班上有以下数据成员.
private:
Point* m_data;
int m_array_size;
我想为这个类实现一个拷贝构造函数,如下所示:
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];
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个分段错误错误,我怀疑是由于delete[]操作.但是,我不知道我在这里做错了什么.我只是释放与之关联的内存m_data并重新分配新内存.
我不确定以下内容是否相关,但由于我在Array类中使用自定义对象作为数据成员,因此这是来自该类的重载赋值运算符.
Point& Point::operator = (const Point &source) {
if(this == &source) return *this;
m_x = source.m_x;
m_y = source.m_y;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
您的复制构造函数delete[]在m_data没有初始化它的情况下尝试成员.将未初始化的指针传递给delete或是未定义的行为delete[].未初始化指针值的大多数其他用途也是UB.
由于这是构造函数,因此完全没有必要delete[].只需删除该行即可.
另一方面,在复制赋值运算符中,您必须记住delete[]现有数组.