C++之 深拷贝和浅拷贝
来源:互联网 发布:如何让win7网络更流畅 编辑:程序博客网 时间:2024/06/18 10:49
#include <iostream>#include <string.h> using namespace std; class Name{public: Name(const char *p) { m_len = strlen(p); m_p = (char *)malloc(m_len + 1); } ~Name() { cout << "析构函数被调用" << endl; if (m_p != NULL) { free (m_p); m_p = NULL; m_len = 0; } cout << "析构函数执行结束" << endl; }private: char *m_p; int m_len;}; int main(){ { Name name1("xiaoming"); Name name2 = name1; } return 0;}
1、浅拷贝程序中存在什么问题?
答:默认复制构造函数可以完成对象的数据成员值简单的复制;
对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制
浅拷贝:在拷贝指针的时候只是拷贝了地址,不会进行空间的复制
2、浅拷贝问题解决:深拷贝
自己写拷贝构造,避免浅拷贝。
#include <iostream>#include <string.h> using namespace std; class Name{public: Name(const char *p) { m_len = strlen(p); m_p = (char *)malloc(m_len + 1); } // 解决浅拷贝的方案:手动编写拷贝构造函数,进行深拷贝 Name (const Name &obj) { m_len = obj.m_len; m_p = (char *)malloc(m_len + 1); strcpy (m_p, obj.m_p); } ~Name() { cout << "析构函数被调用" << endl; if (m_p != NULL) { free (m_p); m_p = NULL; m_len = 0; } cout << "析构函数执行结束" << endl; }private: char *m_p; int m_len;}; int main(){ { Name name1("xiaoming"); Name name2 = name1; } return 0;}
阅读全文
0 0
- Object-c 深拷贝和浅拷贝
- [Objective-C]浅拷贝和深拷贝
- 【C++】深拷贝和浅拷贝
- 【C++】深拷贝和浅拷贝
- Objective-C浅拷贝和深拷贝
- 【C++】深拷贝和浅拷贝解析
- C中的深拷贝和浅拷贝
- [c++]深拷贝和浅拷贝
- 【C++】深拷贝、浅拷贝和写时拷贝
- C++之浅拷贝和深拷贝
- Python之深拷贝和浅拷贝
- c++之浅拷贝和深拷贝
- C++之 浅拷贝和深拷贝
- c++之浅拷贝和深拷贝
- JavaScript之浅拷贝和深拷贝
- javascript之深拷贝和浅拷贝
- C++之 深拷贝和浅拷贝
- Python之深拷贝和浅拷贝
- ArrayList、LinkedList和Vector的异同点
- MySQL day4---子查询与连接
- 汇编语言,寄存器
- Leetcode c语言-Next Permutation
- SQL基础(二)数据类型
- C++之 深拷贝和浅拷贝
- Java实现邮件提醒功能
- Groovy基本使用(1):安装配置
- [嵌入式Linux驱动]S5PV210的步进电机Linux驱动程序
- 如何把eclipse 改成汉化中文版
- uboot2013-10移植(二)--mkconfig注释
- Scala函数式程序设计 week2 Lazy Evaluation
- shell 变量特殊扩展:示例
- SSM整合