浅复制和深复制

来源:互联网 发布:2016超女网络投票 编辑:程序博客网 时间:2024/05/13 12:50
在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”)
1) 一个对象作为函数参数,以值传递的方式传入函数体
//全局函数,传入的是对象  
void g_Fun(Resume C)  
{  
 cout<<"Resume"<<endl;  

2) 一个对象作为函数返回值,以值传递的方式从函数返回;
//全局函数 ,返回的是对象 
Resume g_Fun()  
{  
Resume temp;  
return temp;  
3) 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);
原则是:对于凡是包含动态分配成员或包含指针成员的类都应该提供拷贝构造函数;


</pre><pre code_snippet_id="389273" snippet_file_name="blog_20140612_3_2229368" name="code" class="cpp">
#include<iostream>using namespace std;class Resume{public:Resume(){argc = 0;//浅拷贝可以把值类型逐个复制过去;//p = new int(100);//浅拷贝不可以复制引用的对象;此时两份对象是相同的//(()给new出来得内存初始化,[]是给出内存大小)cout<<argc<<endl;};int argc;int *p;void PrintString();};void Resume::PrintString(){cout<<this->argc<<endl;}int main(void){Resume A;Resume B(A);A.argc = 100;//B.argc = 500;A.PrintString();B.PrintString();getchar();return 0;}
使用浅拷贝的时候B对象可以复制值类型argc,但是指针p指向的是和A同一个对象。  当我们需要实现指向不同对象需要进行深拷贝,在

class Resume

添加:

Resume(const Resume& r)      {           p = new int;    // 为新对象重新动态分配空间          *p = *(r.p);      } 


0 0
原创粉丝点击