8. 析构构造深拷贝浅拷贝赋值操作符重载
Posted 为了财务自由!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8. 析构构造深拷贝浅拷贝赋值操作符重载相关的知识,希望对你有一定的参考价值。
OOP实现一个顺序栈
class SeqStack
public:
//构造函数
//可以带参数,所以可以重载,有多个构造函数
SeqStack(int size = 10)
_pstack = new int[size];
_top = -1;
_size = size;
//析构函数
~SeqStack()
delete[] _pstack;
_pstack = nullptr;
void push(int val)
if(full())
resize();
_pstack[++_top] = val;
void pop()
if(empty())
return ;
--_top;
int top()
return _pstack[_top];
bool empty()
return _top == -1;
bool full()
return _top == _size-1;
private:
int* _pstack;//动态开辟数组,存储顺序栈元素
int _top;//指向栈顶元素位置
int _size;//数组扩容的总大小
void resize()
//按照原来的2倍扩容
int* ptmp = new int[_size * 2];
for(int i=0;i<_size;++i)
ptmp[i] = _pstack[i];
delete[] _pstack;
_pstack = ptmp;
_size *= 2;
;
构造顺序与析构顺序相反!
析构函数可以自己调用:
s1.~SeqStack();
但是调用后,对象就不存在了!所以不建议自己调用析构函数!
那new呢?
malloc开辟内存+SeqStack(60)对象构造!
成员方法的参数,编译器会自动添加一个this指针!
对象默认的拷贝构造函数是做内存的数据拷贝!关键是对象如果占用外部资源,那么浅拷贝就出现问题!
//自定义拷贝构造函数
SeqStack(const SeqStack& src)
_pstack = new int[src._size];
for(int i=0,i<_top;i++)
_pstack[i] = src._pstack[i];
_top = src._top;
_size = src._size;
//赋值操作符=重载
void operator=(const SeqStack& src)
if(this == &src)
return;
delete[] _pstack;
_pstack = new int [src._size];
for(int i=0;i<=src._top;++i)
_pstack[i] = src._pstack[i];
_top = src._top;
_size = src._size;
以上是关于8. 析构构造深拷贝浅拷贝赋值操作符重载的主要内容,如果未能解决你的问题,请参考以下文章