C++ 深拷贝与浅拷贝

#include<iostream>
using namespace std;
#include<string>class Person {public:Person() {cout << "Person的无参构造函数调用" << endl;};Person(int age) {m_Age = age;cout << "Person的有参构造函数调用" << endl;};//拷贝构造函数Person(const Person &p) {cout << "Person的拷贝构造函数调用" << endl;//将传入的人身上的所有属性,拷贝到我身上m_Age = p.m_Age;//	m_Age = p.m_Age;};~Person() {cout << "Person的析构函数调用" << endl;}int m_Age;};void test() {//1.括号法Person p1; //默认构造函数调用Person p2(10); //有参构造函数Person p3(p2); //拷贝构造函数//2、显示法//3、隐式转换法}//1、使用一个已经创建完毕的对象来初始化- -个新对象
void test01() {Person p1(18);cout << "p1的年龄为:" << p1.m_Age << endl;Person p2(p1);cout << "p2的年龄为:"<< p2.m_Age << endl;};//2、值传递的方式给函数参数传值
void doWork(Person p) {
}
void test02() {Person p;doWork(p);
}int main() {test01();//	test01();system("pause");}

 

 

 

深拷贝解决浅拷贝的堆内存重复释放问题

//自己实现拷贝构造函数解决浅拷贝带来的问题Person(const Person &p) {   //拷贝构造函数编译器默认实现cout << "Person 拷贝构造函数调用" << endl;m_Age = p.m_Age;//	m_Height = p.m_Height;  //拷贝构造函数编译器默认实现//深拷贝操作  解决浅拷贝堆内存重复释放m_Height = new int(*p.m_Height);}

 

#include<iostream>
using namespace std;
#include<string>class Person {public:Person() {cout << "Person的无参构造函数调用" << endl;};Person(int age, int height) {m_Age = age;cout << "Person的有参构造函数调用" << endl;m_Height = new  int(height);};/*Person(const Person &p){   //拷贝构造函数编译器默认实现cout << "Person 拷贝构造函数调用"<< endl;m_Age = p.m_Age;m_Height = p.m_Height;  //}*///自己实现拷贝构造函数解决浅拷贝带来的问题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(const Person &p) {cout << "Person的拷贝构造函数调用" << endl;//将传入的人身上的所有属性,拷贝到我身上m_Age = p.m_Age;//	m_Age = p.m_Age;};
*/~Person() {if (m_Height != NULL) {delete m_Height;m_Height = NULL;}cout << "Person的析构函数调用" << endl;}int m_Age;int *m_Height;   //身高
};//1、使用一个已经创建完毕的对象来初始化- -个新对象
void test01() {Person p1(18,160);cout << "p1的年龄为:" << p1.m_Age << "身高为:"<< *p1. m_Height << endl;Person p2(p1);cout << "p2的年龄为:" << p2.m_Age << "身高为:" << *p2.m_Height << endl;};//2、值传递的方式给函数参数传值
void doWork(Person p) {
}
void test02() {Person p;doWork(p);
}int main() {test01();//	test01();system("pause");}

 

总结:如果属性有在堆区开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转载]Cyclone II JTAG ASP 配置下载程序

原文&#xff1a;http://blog.sina.com.cn/s/blog_4739958a0100irp7.html 首先&#xff0c;还是那句话&#xff0c;电脑上写好程序.pof文件直接通过JTAG写到FPGA SRAM里&#xff0c;掉电丢失。 只有把.pof写到串行配置器件上&#xff0c;板子上电后串行配置器件EPCS4将程序自动…

C++ 类和对象成员特性

//当类中成员是其他类对象时&#xff0c;我们称该成员为对象成员 //构造的顺序是:先调用对象成员的构造&#xff0c;再调用本类构造 //析构顺序与构造相反 #include <iostream> using namespace std; #include <string>class Phone{public:Phone(string name){m_P…

android surfaceview 清屏

引用&#xff1a;http://www.eoeandroid.com/forum.php?modviewthread&tid40776 12楼 清屏可以用橡皮擦的画笔画一个屏幕大小的矩形就可以了//这是定义橡皮擦画笔Paint clearPaint new Paint();clearPaint.setAntiAlias(true);clearPaint.setXfermode(new PorterDuffX…

C++ 静态成员

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员 静态成员分为: ●静态成员变量 。所有对象共享同一份数据 。在编译阶段分配内存 。类内声明&#xff0c;类外初始化 ●静态成员函数I 。所有对象共享同一个函数 。静态成员函数只能访问静态成员变量 #include…

ScaleGestureDetector使用注意事项

注&#xff1a;一定要通过view的onTouchEvent调用mScaleGestureDetector.onTouchEvent(ev);&#xff0c;只有这样 才能调用回调函数&#xff1a;onScaleBegin 具体可以参加&#xff1a;android源码&#xff1a;KenBurnsActivity.java 下面是转载的文章&#xff1a; Detects tra…

C++ 静态成员函数

#include <iostream> using namespace std; #include <string>class Person{public://静态成员函数特点://1程序共享一个函数//2静态成员函数只能访问静态成员变量static void func(){cout << "func调用" << endl;m_A 100;//m. _B 100; //…

提高编写CSS代码效率的10个习惯

提高编写CSS代码效率的10个习惯1、保持一贯性。 就像其它的任何事一样&#xff0c;值得一直保持一贯性。保持连贯性&#xff0c;而不是想到什么就给id和class命名什么。 CSS的级联样式有利于加深你的记忆&#xff0c;而且充分利用样式的继承去设置样式表。 首先声明通用的部分的…

hdu 1257 最少拦截系统 (DP)

点击打开链接 #include"stdio.h" int main() {int a[10011],b[10011];int i,j,c,n;while(scanf("%d",&n)!EOF){c1;for(i0;i<n;i)scanf("%d",&a[i]);b[0]a[0];for(i1;i<n;i){for(j0;j<c;j){if(a[i]<b[j])break;}b[j]a[i];if(…

C++ 友元函数

生活中你的家有客厅(Public),有你的卧室(Private) 客厅所有来的客人都可以进去&#xff0c;但是你的卧室是私有的&#xff0c;也就是说只有你能进去 但是呢&#xff0c;你也可以允许你的好闺蜜好基友进去。 在程序里&#xff0c;有些私有属性也想让类外特殊的一些函数或者类进行…

九度1377缓变序列

#include<stdio.h> #include<string.h> int n,m,k,i,j,minN,a[10003]; main() {while(~scanf("%d",&n)){memset(a,0,sizeof(a));minN0x7ffffff,m0,j0;for(i0;i<n;i)scanf("%d",&k),minNminN<k?minN:k,a[k]0?m:0,a[k];if(m1)pr…

关于计算机类课程实验教学的思考

由于计算机机房的限制&#xff0c;没有安装投影仪以及计算机控制管理软件&#xff0c;所以单纯的讲解效果非常不好。老师在上面讲&#xff0c;学生在下面干什么根本不知道。由于教授的实验课和理论课关系不是非常密切。试验的主要内容是网页设计&#xff0c;也就是如何利用Drea…

第四章类和对象 习题答案

一&#xff0e;选择题1.能提供封装的C的下列关键字是&#xff08;C&#xff09;A.whileB. unionC. classD. for2.在下面所列项中&#xff0c;不是面向对象的特点的是&#xff08;C&#xff09;A. 多面性B. 抽象性和封装性C. 多线程和多任务D. 继承性3.下面选项中&#xff0c;对…

在Javascript中闭包(Closure)

一、什么是闭包&#xff1f; “官方”的解释是&#xff1a;所谓“闭包”&#xff0c;指的是一个拥有许多变量和绑定了这些变量的环境的表达式&#xff08;通常是一个函数&#xff09;&#xff0c;因而这些变量也是该表达式的一部分。相信很少有人能直接看懂这句话&#xff0c;因…

C++ 文件写操作

#include <fstream> #include<iostream> using namespace std;void test01(){ofstream ofs;ofs.open("test.txt",ios :: out);ofs << "姓名:张三"<< endl;ofs << "性别:男"<< endl;ofs << "年龄…

JS如何获取URL

JS如何获取URL 一、var urldocument.location; url "www.abc.com/sports/def.aspx"; var r /\/(\w)\.aspx/; alert(url.match(r)[1]); alert(r.exec(url)[1]);二、 var url document.locationurl " http://localhost:8080/Customer/index?tokenghfghfghfghfg…

winform 分页控件分享(二)

大数量分页&#xff0c;使用存储过程。 这个存储过程是网络上考的&#xff0c;呵呵。我把它给贴出来&#xff0c;希望原作者别砸我砖头。。。。。 ALTER PROCEDURE SP_Pagination/**//****************************************************************** 千万数量级分页存…

C++ 二进制文件写操作

#include<iostream> using namespace std; #include<fstream>class Person { public:char m_Name[64]; //姓名int m_Age; //年龄};void test01(){//1、包含头文件//2.创建流对象ofstream ofs("person.txt",ios::out | ios::binary);//3、打开文件//ofs.o…

转载:数据库表结构设计方法及原则

在目前的企业信息系统中&#xff0c;数据库还是最佳的数据存储方式&#xff0c;虽然已经有很多的书籍在指导我们进行数据库设计&#xff0c;但应该那种方式是设计数据库的表结构的最好方 法、设计时应遵从什么样的原则、四个范式如何能够用一种方式达到顺畅的应用等是我一直在思…

C++ 二进制文件读操作

读二进制文件 二进制方式读文件主要利用流对象调用成员函数read 函数原型:[ istream& read(char *buffer,int len); 参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数 示例: #include <fstream> #include <string> #include<iostream>…

成为中国最好的Magento开发公司

MEC电子商务是国内首家Magento定制服务公司。 对于Magento开发&#xff0c;我们的目标是做中国最好的Magento开发公司&#xff0c;但这是一个无止境的追求&#xff0c;从我们2007年创立之初至现在我们积累了大量国际知名品牌的案例&#xff0c;发布了3个MEC Magento系列产品&am…