深拷贝 和 浅拷贝
来源:互联网 发布:mysql replace 并发 编辑:程序博客网 时间:2024/05/16 12:55
深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝
浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。
#include <iostream>using namespace std;class CA{ public: CA(int b,char* cstr) { a=b; str=new char[b]; strcpy(str,cstr); } CA(const CA& C) { a=C.a; str=new char[a]; //深拷贝 if(str!=0) strcpy(str,C.str); } void Show() { cout<<str<<endl; } ~CA() { delete str; } private: int a; char *str;};int main(){ CA A(10,"Hello!"); CA B=A; B.Show(); return 0;}
class Test{public: int* p; Test(int value) { p = new int(value); } ~Test() { delete p; } void printValue() { cout << "The value is " << *p << endl; }};void func(Test t){ cout << "in the function" << endl;}int main(){ Test t1 = 33; func(t1); //没有提供深拷贝函数,运行后会出错 t1.printValue(); return 0;}
class Test{public: int* p; Test(int value) { p = new int(value); } Test(const Test& t) //深拷贝函数 { p = new int; *p = *(t.p); } ~Test() { delete p; } void printValue() { cout << "The value is " << *p << endl; }};void func(Test t){ cout << "in the function" << endl;}int main(){ Test t1 = 33; func(t1); t1.printValue(); return 0;}
0 0
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝 和 浅拷贝
- 浅拷贝和深拷贝
- 浅拷贝和深拷贝
- 深拷贝和浅拷贝
- 深拷贝和浅拷贝
- 游戏云间之四:云主机与vps的对比
- dns域名
- 分治法-简单矩阵
- 游戏云间之五:游戏架构
- 最近在网上看见的一个有趣的题目 蛇形数组
- 深拷贝 和 浅拷贝
- LeetCode:Pascal's Triangle
- C++学习第一天01
- 几个sql语句的介绍
- 安装 PHP 的 PECL HTTP 扩展
- stm32的CAN通信
- Android 自动化测试—robotium(五)Spinner控件
- 五种常见php设计模式(转)
- 职责链模式