浅复制和深复制
来源:互联网 发布:2016超女网络投票 编辑:程序博客网 时间:2024/05/13 12:50
在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”)
1) 一个对象作为函数参数,以值传递的方式传入函数体
1) 一个对象作为函数参数,以值传递的方式传入函数体
//全局函数,传入的是对象
void g_Fun(Resume C)
{
cout<<"Resume"<<endl;
}
void g_Fun(Resume C)
{
cout<<"Resume"<<endl;
}
2) 一个对象作为函数返回值,以值传递的方式从函数返回;
//全局函数 ,返回的是对象
Resume g_Fun()
{
Resume temp;
return temp;
}
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
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 浅复制和深复制
- 浅复制和深复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 深复制和浅复制
- 浅复制和深复制
- 深复制和浅复制
- 深复制和浅复制
- 连接池DBCP的使用
- MTK(44)
- sql 内连接,左连接,右连接
- 极路由的一次尝试
- automake连载---关于两个文件configure.in和Makefile.am的编写
- 浅复制和深复制
- OCP 1Z0 052 49
- Linux的用户进程是如何使用内存
- 处理高并发要注意的一些东西
- 国际期刊会议
- sql标签中使用标签变量以及文章的链接-织梦CMS
- 8张图理解Java
- 安卓开发 android development 常见错误汇总
- 二叉树数组实现[C/C++]代码