对象的浅拷贝和深拷贝
对象的浅拷贝和深拷贝
一个类有多个对象,共享一套成员方法
成员方法如何知道操作哪个对象?
成员方法一经编译,方法参数前面添加一个this指针
堆stack 栈heap?
- 局部变量放栈上
- new delete等动态分配在堆上,堆就是一个动态分配的内存区域
- 全局变量 放数据段,生命周期为整个程序的开始到结束
1 | int main() |
s2析构先将地址释放,s1析构失败
对象默认的拷贝构造,(浅拷贝)是内存的数据拷贝
关键是对象若占用外部资源(指针指向外部内存),那么浅拷贝出现问题
因此,应该做深拷贝,为新对象也分配内存,再把内存数据拷贝过去,不能用默认的拷贝构造函数
1 | //需要自定义拷贝构造函数,深拷贝 |
memcpy(),realloc() 都是浅拷贝,拷贝后指针指向的内存地址都一样
1 | s2=s1; //默认的赋值操作, |
因此还要自定义赋值函数
```
//赋值重载函数,复制意味着已经有了定义对象
void operator=(const SeqStack& src) //这里参数为常引用,可以避免不必要的对象拷贝
//void operator=(SeqStack src);
// 按值传递,会触发拷贝构造函数
{
delete[] _pstack; //先释放当前对象占用的外部资源
if (this==&src)
return; //防止自己给自己赋值
_pstack= new int[src._size];
for (int i = 0; i < _size; i++)
{
_pstack[i]=src._pstack[i];
}
_top=src._top;
_size=src._size;
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Yolo-zzy的博客!