拷贝构造函数~浅复制深复制~浅复制带来的危害以及解决办法
2018-04-11 21:54
176 查看
假设类A中有个数据成员s,并且s是利用new操作从堆中动态获得的存储空间,那么在执行以下操作:
A a;
a.setS(5);
A b;
b=a;
那么a和b中的成员s将会共享同一块存储空间。假设a中的s发生变化,那么b中的s也将会发生变化,更为严重 的是如果a和b中有一个对象销毁,s所占有的分配空间被释放的时候,会对另一个对象产生灾难性的影响。
解决办法:
1.写拷贝构造函数(复制初始化构造函数)。
格式:类名(const 类名&);
在拷贝构造函数中为s分配独立的堆空间。
2.对赋值运算符“=”进行重载。
道理是一样的,都是对s分配属于自己的存储空间。
A a;
a.setS(5);
A b;
b=a;
那么a和b中的成员s将会共享同一块存储空间。假设a中的s发生变化,那么b中的s也将会发生变化,更为严重 的是如果a和b中有一个对象销毁,s所占有的分配空间被释放的时候,会对另一个对象产生灾难性的影响。
解决办法:
1.写拷贝构造函数(复制初始化构造函数)。
格式:类名(const 类名&);
在拷贝构造函数中为s分配独立的堆空间。
2.对赋值运算符“=”进行重载。
道理是一样的,都是对s分配属于自己的存储空间。
相关文章推荐
- mysql配置文件不生效以及配置同步复制报错“The server is not configured as slave”解决办法
- 个人关于hadoop使用LZO压缩主要步骤以及带来的后续问题和解决办法
- nginx笔记4-负载均衡带来的问题以及解决办法
- Vim中ctags -R不能标签子目录的原因以及解决办法
- MapReduce(Hbase)学习笔记---初学遇到的问题以及解决办法
- ssh 登录出现的几种错误以及解决办法
- 1.4 VC6.0在win7下安装的兼容性问题以及解决办法
- extjs的gridpanel的数据内容不能复制解决办法
- 【Vegas原创】无法复制粘贴的解决办法
- C# Page_load()事件 执行两遍 出现的几种情况以及解决办法
- Eclipse 报 “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”错误的解决办法以及文本文件换行
- ubuntu无法上网以及无法远程登录、cuteftp无法登陆linux的解决办法
- 模仿行迁移和行链接以及解决办法
- 关于Linux下大量复制或移动文件时“参数列表过长”的解决办法
- IIS启用GZip压缩后带来的问题及解决办法
- (转)EVC学习过程中遇到的错误以及解决办法总结
- javamail验证失败Authentication failed的原因以及解决办法
- iOS支付宝支付接入的几个坑—以及解决办法
- VMware虚拟机偶尔无法实现拖曳功能的解决办法以及Vmware虚拟机NAT连接模式进行端口转发
- 不能跨虚拟机复制 vmtools显示灰色无法安装解决办法