C++深浅拷贝
来源:互联网 发布:rj45 网络变压器 无灯 编辑:程序博客网 时间:2024/05/24 01:39
简单赋值浅拷贝(只赋值拷贝,不重新分配空间)
#include <iostream>#include <stdlib.h>using namespace std;class String{public:String(char* str = ""):_str(str){}String(const String& str):_str(str._str){}String& operator =(const String& str){if(this != &str){strcpy(_str, str._str);}return *this;}//~String()//由于是赋值拷贝,所以构造和拷贝构造的对象是指向同一空间,调用析构释放两次会程序崩溃//{//if(_str)//{//delete[] _str;//_str = NULL;//}//}void Getstr(){cout<<_str<<endl;}private:char* _str;};int main(){String s1("hello world!");String s2(s1);s1.Getstr();s2.Getstr();return 0;}深拷贝(重新开辟一块相同大小的空间,然后把目标拷贝过去)
传统写法
#include <iostream>using namespace std;class String{public:String(char* str = ""):_str(new char[strlen(str)+1]){strcpy(_str, str);}String(const String& str):_str(new char[strlen(str._str)+1]){strcpy(_str, str._str);}String& operator =(const String& str)//创建tmp,避免了对自身赋值的再判断{char* tmp = new char[strlen(str._str)+1];strcpy(tmp, str._str);delete[] _str;_str = tmp;return *this;}~String(){if(_str)delete[] _str;}private:char* _str;};int main(){String s1("hello world!");String s2(s1);return 0;}现代写法
#include <iostream>#include <stdlib.h>using namespace std;class String{public:String(char* str = ""):_str(new char[strlen(str)+1]){strcpy(_str, str);}String(const String& str):_str(NULL){String tmp(str._str);swap(_str, tmp._str);}String& operator =(String s)//参数传值调用一次构造函数,在函数结束时自动调用析构函数进行销毁,简化代码{swap(_str, s._str);return *this;}~String(){if(_str)delete[] _str;}private:char* _str;};int main(){String s1("hello world!");String s2(s1);return 0;}
阅读全文
0 0
- Objective-c 深浅拷贝
- 【C++】 浅析深浅拷贝
- C++String深浅拷贝
- Objective-C 深浅拷贝学习
- [解析]Objective-C 深浅拷贝
- C++String深浅拷贝问题
- 浅析Objective-C 深浅拷贝
- c++-----string和深浅拷贝
- C++String深浅拷贝、写时拷贝
- ios&object-c深浅拷贝解析
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 深浅拷贝
- 热修复框架Tinker最完整讲解(01)——集成之路
- LTE学习笔记-PHY-PHY层概述
- [leetcode]42. Trapping Rain Water
- Git新建分支出现fatal: Not a valid object name: 'master'错误
- 关于hadoop集群你需要知道的知识点
- C++深浅拷贝
- Java 线程的同步(synchronized)与死锁
- 数据分析(入门篇)-第二章-玩转数据分析-Part5(Excel数据分析工具库-相关分析)
- bzoj 2118 墨墨的等式 dijkstra
- 奇偶校验 累加和校验 CRC校验
- stm8s开发(八) IIC的使用:IIC主机通信!
- LTE学习笔记-PHY-E-arfcn
- 1117. Eddington Number(25)
- pyboard固件升级