类和对象—对象特性—深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
#include <iostream>
using namespace std;
class Person{public://构造函数 Person(){cout << "Person 无参构造函数的调用!" << endl; }Person(int age,int height){m_Height = new int(height);m_Age = age;cout << "Person 有参构造函数的调用!" << endl; }//析构函数 将堆区开辟的数据做释放操作 ~Person(){if(m_Height == NULL){delete m_Height;m_Height = NULL;} cout << "Person 析造函数的调用!" << endl; } int m_Age; //年龄 int *m_Height; //身高
};void test01(){Person p1(10,160);cout << "p1的年龄为 " << p1.m_Age << endl;cout << "p1的身高为 " << *p1.m_Height << endl;Person p2(p1); //编译器做了一个浅拷贝的操作 cout << "p2的年龄为 " << p2.m_Age << endl; cout << "p2的身高为 " << *p2.m_Height << endl;
}int main(){test01(); system("pause");return 0;
}
浅拷贝的问题:
浅拷贝的问题要用深拷贝来解决:
新的代码:
#include <iostream>
using namespace std;class Person{public://构造函数 Person(){cout << "Person 无参构造函数的调用!" << endl; }Person(int age,int height){m_Height = new int(height);m_Age = age;cout << "Person 有参构造函数的调用!" << endl; }//自己实现拷贝构造函数,解决浅拷贝带来的问题 Person(const Person &p){cout << "Person 拷贝构造函数的调用" << endl;m_Age = p.m_Age ;// m_Height = p.m_Height;编译器做的操作//深拷贝操作m_Height = new int(*p.m_Height);}//析构函数 将堆区开辟的数据做释放操作 ~Person(){if(m_Height == NULL){delete m_Height;m_Height = NULL;} cout << "Person 析造函数的调用!" << endl; } int m_Age; //年龄 int *m_Height; //身高
};void test01(){Person p1(10,160);cout << "p1的年龄为 " << p1.m_Age << endl;cout << "p1的身高为 " << *p1.m_Height << endl;Person p2(p1); //编译器做了一个浅拷贝的操作 cout << "p2的年龄为 " << p2.m_Age << endl; cout << "p2的身高为 " << *p2.m_Height << endl;
}int main(){test01(); system("pause");return 0;
}
注意:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数。防止浅拷贝带来的问题。
类和对象—对象特性—深拷贝与浅拷贝相关推荐
- JS对象拷贝:深拷贝和浅拷贝
摘要:对象拷贝,简而言之就是将对象再复制一份,但是,复制的方法不同将会得到不同的结果. 本文分享自华为云社区<js对象深浅拷贝,来,试试看!>,作者: 北极光之夜.. 一.速识概念: 对象 ...
- 深拷贝和浅拷贝的理解与应用
对象拷贝就是将一个对象的属性拷贝到另一个有着相同类型的对象中去.java中有两种类型的对象拷贝:深拷贝.浅拷贝. 假如我们要复制一对基本数据类型变量到另外一个具有相同的类型的基本变量时,我们一般会这样 ...
- python——深拷贝与浅拷贝的区别
一.浅拷贝 原列表 data1=[8,24,[2,30,35]] 浅拷贝后的列表 data2=data1.copy()原列表的内存地址 print(id(data1)) 2726096606848 拷 ...
- 【233】python—深拷贝与浅拷贝的区别
♣ 题目部分(原文见公众号:python宝) python宝 https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NjI ...
- 【黑马程序员 C++教程从0到1入门编程】【笔记4】C++核心编程(类和对象——封装、权限、对象的初始化和清理、构造函数、析构函数、深拷贝、浅拷贝、初始化列表、友元friend、运算符重载)
黑马程序员C++教程 文章目录 4 类和对象(类属性[成员属性],类函数[成员函数]) 4.1 封装 4.1.1 封装的意义(三种权限:public公共.protected保护.private私有)( ...
- Python 精选笔试面试习题—类继承、方法对象、包管理、闭包、可变类型作为默认参数、列表引用、sort与sorted、 append 和 extend、深拷贝和浅拷贝
1. 类继承 如下代码 class A(object):def show(self):print 'This is calss A'class B(A):def show(self):print 'T ...
- 【转】C#对象的深拷贝与浅拷贝
转自:http://www.cnblogs.com/phoenix-rock/archive/2006/11/07/shallowcopy_deepcopy.html 1. 深拷贝是指 ...
- 深拷贝与浅拷贝、值语义与引用语义对象语义 ——以C++和Python为例
深拷贝与浅拷贝.值语义与引用语义/对象语义 --以C++和Python为例 值语义与引用语义(对象语义) 本小节参考自:https://www.cnblogs.com/Solstice/archive ...
- python深拷贝一个对象_Python对象的深拷贝和浅拷贝详解
本文内容是在<Python核心编程2>上看到的,感觉很有用便写出来,给大家参考参考! 浅拷贝 首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法.然后使用id函数来看看它们的标 ...
最新文章
- 用了很多年Dubbo,连Dubbo线程池监控都不知道,觉得自己很厉害?
- 变电站越级跳闸的几大原因(转载)
- cacti安装和第三方模块的导入
- shell批量创建随机文件名格式文件
- interface abstract与virtual
- yii不能没有提示验证错误信息_安装Mac系统时提示”应用程序副本不能验证 它在下载过程...”的解决方法...
- Power Designer逆向工程连接数据库创建pdm-oracle
- win10一直正在检查更新_听说每个新时代的网民,都被win10迫害过
- 汉诺塔C语言递归实现详解
- ubantu卸载MySQL数据库
- CS:APP3e 深入理解计算机系统_3e Datalab实验
- 学信网查学历和学位网查学位的基本操作
- Python20190206 解不定方程并绘制散点图标记解
- linux命令之head、tail命令具体解释
- 四川教师职称计算机考试试题,四川省中小学教师职称计算机应用能力考试、外语免试审批表.doc...
- C语言输出所有水仙花数字
- canal1.1.5 配置kaka
- Mars3D(含Cesium)数据及服务篇:shp转geojson格式
- 挠破头都不知道小孩保险怎么买?三分钟给你搞定!
- 5G预商用,三大运营商开年一波秀