深拷贝与浅拷贝
来源:互联网 发布:手机p2p软件下载 编辑:程序博客网 时间:2024/06/05 07:09
浅复制:逐行逐字节的复制工作
class MyString{ public: MyString():str(nullptr){}; ~MyString(); const char* c_str(){return str;}; char* operator=(const char* s) private: char* str;};char* MyString::operator=(const char* s){ if(str) { delete[] str; } if(s)//s不为空的时候执行拷贝操作 { str = new char[strlen(s)+1]; strcpy(str,s); } else str = nullptr; return str;}
假如,我们自己实现了String类,重载了”=”操作,里边有一个字符指针。刚开始,s1.str指向this,s2.str指向that,当执行s1=s2时,s1与s2的str同时指向that所在的存储区。这样就会造成两个问题:1)没有指针指向this所在的内存空间使得这片内存空间无法被访问从而成为内存垃圾。2)当s1与s2同时消亡时, that所在的内存空间时,由于有两个指针指向该片区域,故这片区域会被释放两次,这也会引发内存问题。
深复制:将对象中指针成员变量指向的内容,复制到另一个对象中指针指针成员指向的地方,具体的过程如下图所示
实现代码如下:
MyString& operator=(const char& s){ if(str) delete[] str; str = new char[strlen(s)+1]; strcpy(str,s); return *this;}
阅读全文
0 0
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- FPGA 时钟设计 1 —— 时钟资源总结
- java线程优先级
- js与h5的结合,初步学习。
- 485. Max Consecutive Ones
- 浅谈JVM(二)——内存分配和垃圾回收
- 深拷贝与浅拷贝
- 批量xlsx表格转json
- 欢迎使用CSDN-markdown编辑器
- 洛谷P3144 [USACO16OPEN]关闭农场Closing the Farm_Silver
- 并查集的启发式合并
- Scala 强大的集合数据操作示例
- json_list
- 利用代理IP爬取网页的小心得
- C++ 任意进制转换为十进制,十进制转换为任意进制