C++之浅拷贝和深拷贝
来源:互联网 发布:excel数据有效性公式 编辑:程序博客网 时间:2024/05/29 04:36
一、浅拷贝:就是有缺省的拷贝构造函数所实现的数据成员逐一赋值。
通常情况下,缺省的拷贝构造函数是可以胜任工作的。但是,如果数据成员中有指针类型,就会发生错误。
class Stu{ private: char *name; int score; public: Stu(char *name1,int s); ~Stu();};Stu::Stu(char *name1,int s){ name=new char[strlen(name1)+1]; strcpy(name,name1); score=s;}Stu::~Stu(){ cout<<"d.........."<<name<<endl; delete name;}int main(){ Stu s1("Mr.zhang",90); Stu s2=s1;}
输出:
其中第二行是乱码,不同的运行,可以产生不同的结果。
分析:
第一,在创建第一个对象stu1时,调用构造函数,为stu1分配一片内存用来存stu1中的name。
第二,在创建第二个对象stu2时,没有调用构造函数,没有为stu2分配内存,调用了缺省的拷贝构造函数,stu1和stu2都指向了同一片内存。
第三,程序结束时,stu1的name释放,就是stu2中的name也就释放了。
二、深拷贝:就是显示的定义拷贝构造函数。
通常情况下,显示的拷贝构造函数就是为了解决这类带有指针类型的类的拷贝。它为要拷贝的对象分配了空间。
示例:
class Stu{ private: char *name; int score; public: Stu(char *name1,int s); ~Stu(); Stu(Stu& stu1);};Stu::Stu(char *name1,int s){ name=new char[strlen(name1)+1]; strcpy(name,name1); score=s;}Stu::Stu(Stu& stu1){ name=new char[strlen(name)+1]; strcpy(name,stu1.name); score=stu1.score;}Stu::~Stu(){ cout<<"d.........."<<name<<endl; delete name;}int main(){ Stu s1("Mr.zhang",90); Stu s2=s1;}
个人感觉:浅拷贝和深拷贝的区别在于是否都有独立的内存空间。
- Object-c 深拷贝和浅拷贝
- [Objective-C]浅拷贝和深拷贝
- 【C++】深拷贝和浅拷贝
- 【C++】深拷贝和浅拷贝
- Objective-C浅拷贝和深拷贝
- 【C++】深拷贝和浅拷贝解析
- C中的深拷贝和浅拷贝
- [c++]深拷贝和浅拷贝
- 【C++】深拷贝、浅拷贝和写时拷贝
- C++之浅拷贝和深拷贝
- Python之深拷贝和浅拷贝
- c++之浅拷贝和深拷贝
- C++之 浅拷贝和深拷贝
- c++之浅拷贝和深拷贝
- JavaScript之浅拷贝和深拷贝
- javascript之深拷贝和浅拷贝
- C++之 深拷贝和浅拷贝
- Python之深拷贝和浅拷贝
- 编程珠玑
- C++字符串string类型
- OCP-1Z0-053-V12.02-64题
- 为Ubuntu12.04安装中文语言支持
- PL/SQL怎样对字符串进行相等判断。
- C++之浅拷贝和深拷贝
- frame框架的优缺点
- 黑马程序员_Java基础加强高新技术笔记(一)
- PAT《数据结构学习与实验指导》实验项目集 2-05, 2-06, 2-07,2-08
- ubuntu 安装ibus输入法
- CentOS中yum源的修改方法
- 关于素数:求不超过n的素数,素数的判定(Miller Rabin 测试)
- Matlab csrot,找不到指定的应用程序错误