- 浅拷贝
只是对指针的拷贝,拷贝后两个指针指向同一个内存空间;
- 深拷贝
对指针指向的内容进行拷贝(重新分配内存),经深拷贝后的指针是指向不同地址的指针;
因此浅拷贝释放内存的时候很容易出现因为释放两个指针而内存出错。
- 浅拷贝(释放时,因为多次释放出错)
只拷贝指针
//拷贝构造函数
Vector(const Vector<T>& v)
:_start(nullptr)
,_finish(nullptr)
,_endOfStorage(nullptr)
{
_start=v._start;
_finish=v._finish;
_endOfStorage=v._endOfStorage;
}
- 深拷贝
对资源进行拷贝
Vector(const Vector<T>& v)
:_start(nullptr)
, _finish(nullptr)
, _endOfStorage(nullptr)
{
size_t n = v.capacity();
_start = new T[n];
for (size_t i = 0; i < v.size(); ++i)
{
_start[i] = v[i];
}
_finish = _start + v.size();
_endOfStorage = _start + n;
}
- 写一个Vector的类
template<class T>
class Vector
{
typedef T* operator;
typedef const T* const_iterator;
iterator _start;
iterator _finish;
iterator _endOfStorage;
public:
//构造函数
Vector()
:_start(nullptr)
, _finish(nullptr)
, _endOfStorage(nullptr)
{}
//析构函数
~Vector()
{
if(_start)
{
delete[] _start;
_star=_finish=_endOfStorage=nullptr;
}
}
T& operator[](size_t pos)
{
if (pos >= 0 && pos < size())
return _start[pos];
}
size_t size() const
{
return _finish - _start;
}
size_t capacity() const
{
return _endOfStorage - _start;
}
};
可以用自己编辑器,把拷贝放进去试试;
欢迎大佬们批评、教导;