浅拷贝&深拷贝的再次理解
来源:互联网 发布:叮叮软件 编辑:程序博客网 时间:2024/05/21 11:08
以前对浅拷贝的认识不够,认为只是对指针的赋值,没有真实的开辟空间。看了一篇博客后感觉自己的认识还不够,其实浅拷贝还会导致内存泄漏!对,你没看错,确实是 内存泄漏!最后会把博客链接贴出来。
我们以前对浅拷贝深拷贝的理解是这样的:
浅拷贝是对指针的拷贝,拷贝以后两个指针指向的是同一块内存空间,深拷贝是另外开辟一块空间,两个指针指向不同的空间,当一个指针释放后,另一个指针照样可以使用。
然而浅拷贝在一个指针释放后,还存在一个问题就是,这块空间不能使用了,即内存泄漏。
下面贴一段代码:
classA
{
public:
A()
{
_a=newchar(100);
cout<<"A()"<<endl;
}
~A()
{
if(_a)
{
delete_a;
_a=NULL;
cout<<"~A()"<<endl;
}
}
private:
char* _a;
};
voidtest()
{
A a;
A b(a);
}
你们可以试验一下,我运行后会报错!这是为什么呢?
我们没有定义拷贝构造函数,对象b调用的是默认的拷贝构造函数,执行的是浅拷贝。程序运行结束对象a析构后,_a指向的空间被释放。然而b对象的_a还在指向这块空间,再次delete就会报错,报错原因就是对同一块空间delete两次。
至此我们无法再操作这块空间,造成内存泄漏!
这里总结一下浅拷贝会出现的问题:
- 浅拷贝只是拷贝了一个指针,两个指针指向同一块内存,这样delete两次后会报错。
- 由于两个指针都指向同一个内存所以,任何一个指针对内存的操作都会影响到另一个
- 会造成内存泄漏!(绝对的硬伤啊,看你以后还用不)
博客链接:http://blog.csdn.net/feitianxuxue/article/details/9275979
阅读全文
0 0
- 浅拷贝&深拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 【C++】对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝和浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 对深拷贝与浅拷贝的再次理解
- 深拷贝和浅拷贝的理解?
- 深拷贝和浅拷贝的理解
- 深拷贝和浅拷贝的理解?
- 微信小程序
- 834_b_The Festive Evening
- elasticsearch的object类型和动态映射
- 用户体验 | 寻找成套的 App SDK 服务
- ubuntu16.04下安装TensorFlow(GPU加速)----详细图文教程
- 浅拷贝&深拷贝的再次理解
- PHP 表单处理
- 华为腾讯互掐背后物联网数据的重要性
- eclipse上配置tomcat
- 微信小程序组件
- windows下electron安装问题一则
- ubuntu16上传文件到服务器
- flask 调试模式自动加载修改后代码
- String中substring方法内存泄漏问题