permissions axios ios5 vue状态管理 vue开发文档 vue前端框架 nginx视频 mysql更新多个字段 pcie高速固态硬盘 matlab取绝对值 判断bigdecimal是否为空 matlab读入图片 svn查看历史版本 oracle查看所有数据库 后台管理网站模板 python获取日期 python命令 java开发语言 迷宫解锁 右键菜单背景 qtp下载 tftpd64 pdf拆分工具 backtrack3 银头鲑鱼 R语言初学者指南 pmbok第六版 js代码混淆工具 透视网格工具怎么取消 淘宝店铺采集 execryptor 淘宝抽奖活动 winsxs可以删除吗 文件分割 cad多段线线宽设置 小米开发者选项 gif动画制作工具 祸星龙 jdk8安装教程 5g网络技术
当前位置: 首页 > 学习教程  > 编程学习

C/C++深浅拷贝构造函数

2021/1/9 2:04:56 文章标签: 深浅拷贝

提要: 1.0 深浅拷贝,都是针对拷贝构造函数而言的。 2.0 深浅拷贝的区别是:在拷贝指针类型的数据成员的时候。 浅拷贝:拷贝ptr; 深拷贝:拷贝*ptr.—new 一块内存存放内容。 3.0 千万注意,尽量不要使用浅拷贝…

提要:
1.0 深浅拷贝,都是针对拷贝构造函数而言的。
2.0 深浅拷贝的区别是:在拷贝指针类型的数据成员的时候。
浅拷贝:拷贝ptr;
深拷贝:拷贝*ptr.—new 一块内存存放内容。
3.0 千万注意,尽量不要使用浅拷贝:
其一,是因为容易修改原对象的数据;
其二,是极容易发生:连续 delete 释放一块内存两次。(会异常中断abort())

一、拷贝构造函数的声明:

1.0 拷贝构造: 用一个对象初始化同类型的另一个对象。

2.0 声明:
Circle (Circle&);
Circle (const Circle&);

3.0 带有默认参数的拷贝构造函数:
Circle(const Circle&, int n =1);

4.0 拷贝构造函数:一般是把私有数据成员全部赋值过去。
Circle(const Circle& C)
{
	this->radius = C.radius;
// 可以加一些其他的,everything you want to add
}

二:深拷贝和浅拷贝:

1.0 深拷贝:拷贝指针指向的内容(拷贝*ptr);
2.0 浅拷贝:只拷贝指针的地址,而非指针指向的内容。(拷贝ptr).

3.0 浅拷贝出现的场景:
					第一. 创建新对象时的隐士构造函数;
					第二. 在使用‘=’时;

4.0 如何把浅拷贝变为深拷贝呢?
					第一. 自己写拷贝构造函数,不用隐士的构造函数;
					第二. 重载‘=’号。

三、浅拷可能造成危害:拷贝对象创建的对象修改时,会把原本的数据也修改了
在这里插入图片描述
处理方法:
使用深拷贝:

1.0 是这样的,上面的时错的,很经典。e.birthdate 时一个指针,是一个编译期错误。
Kid(const Kid& e)
	{
		this->birthday = new Data{*(e.birthday)};
	}

2.0 在使用拷贝构造函数,且拷贝指针类型的数据时,用new在堆区重新开辟一块内存。
Employee(const Employee& e)
{
	birthdate = new Data{e.birthdate};
}


本文链接: http://www.dtmao.cc/news_show_1100292.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?