编写一个用于数值计算的向量
通过普通的数组来存储数据
其中一个构造函数如下:
/*
**********************************************************************
*/
/* 构造函数:根据 数组 与 数组的长度 构造向量 */
/* ********************************************************************** */
IVector::IVector( double * _data, const int _size )
{
this -> _data = _data;
this -> _size = _size;
}
/* 构造函数:根据 数组 与 数组的长度 构造向量 */
/* ********************************************************************** */
IVector::IVector( double * _data, const int _size )
{
this -> _data = _data;
this -> _size = _size;
}
如下代码的执行操作部分是没问题的:
{ // 注意:问题的关键在于,这两个对象是由同一个数组构造的
IVector vector1( array2, _size );
IVector vector2( array2,_size );
// 操作
}
IVector vector1( array2, _size );
IVector vector2( array2,_size );
// 操作
}
但当 离开这段代码 ,也就是运行到代码片断的" } " 时,就出现问题了。挂了。
当定位了错误的位置,查看了析构函数后,很快就确定了错误的原因:浅拷贝。
浅拷贝:实现简单、空间效率略高,但潜在错误多
深拷贝:实现略麻烦些、内存耗费大、可以消除许多潜在错误
c++ 的内存管理确是一件头疼的事件