之前看一些资料提到浅拷贝的问题,即在复制对象时,只是对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的也是浅拷贝。如果对象中存在动态成员,如指针,那么仅仅做浅拷贝是不够的,并且容易引发错误,最经典的例子:
#include <iostream>
#include <stdio.h>
using namespace std;
class A{
public:
A(){m_p = new int(10);};
~A(){cout << "destruction function" << endl;delete m_p;};
int* m_p;
};
void copyTest(A atmp){
;
}
int main(){
A a;
copyTest(a);
}
执行这段代码会出现崩溃,因为析构函数里的delete m_p执行了两次,而m_p指向的是同一块内存。因为在调用copyTest时传入了对象a,atmp利用a作为参数执行了默认拷贝构造函数,但是只是简单地把对象a的m_p的内存地址拷贝给atmp的m_p,因此这个时候atmp.m_p只是指向了和a.m_p相同的内存块。
当copyTest执行完毕后,临时变量atmp会被销毁,这个时候析构函数被调用,delete了m_p指向的内存。而当main函数执行完毕后,a对象也需要被销毁,这个时候析构函数再次被执行,而这个时候m_p已经不知道指向什么地方了,delete操作引发程序崩溃。
解决这个问题的方法有很多:一种方法是实现智能指针,对m_p进行引用计数,当引用值为0时才执行delete;也可以每次把m_p的初始值设为NULL,每次执行delete操作前先检查m_p是否为NULL,delete后再让m_p指向NULL,这个方法其实道理和智能指针差不多,只是智能指针更合理有效地利用类进行管理;还有一种做法是重写拷贝构造函数,确保在对象复制时进行深拷贝,即重新分配内存空间,并且把a中m_p指向内存的内容拷贝到分配的空间。
以上这种情况只有在利用“值传递”复制对象时才发生,如果我们传递的是指针,就不会有这种情况了:
#include <iostream>
#include <stdio.h>
using namespace std;
class A{
public:
A(){m_p = new int(10);};
~A(){cout << "destruction function" << endl;delete m_p;};
int* m_p;
};
void copyTest(A* atmp){
;
}
int main(){
A* a;
copyTest(a);
}
因为传递到copyTest的参数只是一个地址,指向的还是对象a,并没有发生对象的复制,当然就不存在上面的深浅拷贝问题了。
以上就是小编为大家带来的浅谈C++的浅拷贝出现的错误全部内容了,希望大家多多支持~
# c
# 浅拷贝
# C++拷贝构造函数(深拷贝与浅拷贝)详解
# C++浅拷贝与深拷贝及引用计数分析
# 深入理解C/C++中的写时拷贝
# 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
# 深入C++拷贝构造函数的总结详解
# c++中深浅拷贝以及写时拷贝的实现示例代码
# 这个时候
# 的是
# 这种情况
# 时才
# 象中
# 有很多
# 就不
# 完毕后
# 设为
# 两次
# 这段
# 有效地
# 重写
# 什么地方
# 只是一个
# 浅谈
# 即在
# 小编
# 而当
# 最经典
相关文章:
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
如何通过远程VPS快速搭建个人网站?
如何设计高效校园网站?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何用虚拟主机快速搭建网站?详细步骤解析
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
学校建站服务器如何选型才能满足性能需求?
建站之星在线版空间:自助建站+智能模板一键生成方案
黑客如何通过漏洞一步步攻陷网站服务器?
高端企业智能建站程序:SEO优化与响应式模板定制开发
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
北京专业网站制作设计师招聘,北京白云观官方网站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
高防服务器如何保障网站安全无虞?
制作网站的基本流程,设计网站的软件是什么?
建站主机选购指南:核心配置与性价比推荐解析
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
建站之星后台密码遗忘?如何快速找回?
网站制作壁纸教程视频,电脑壁纸网站?
如何用西部建站助手快速创建专业网站?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
七夕网站制作视频,七夕大促活动怎么报名?
如何选择可靠的免备案建站服务器?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
建站VPS推荐:2025年高性能服务器配置指南
nginx修改上传文件大小限制的方法
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何选择高效便捷的WAP商城建站系统?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
宿州网站制作公司兴策,安徽省低保查询网站?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何快速搭建高效WAP手机网站吸引移动用户?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何在阿里云ECS服务器部署织梦CMS网站?
如何快速搭建高效WAP手机网站?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何快速搭建虚拟主机网站?新手必看指南
如何快速打造个性化非模板自助建站?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何选择PHP开源工具快速搭建网站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
建站10G流量真的够用吗?如何应对访问高峰?
焦点电影公司作品,电影焦点结局是什么?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。