深拷贝的现代写法
2016-03-25 12:40
375 查看
#include<iostream> using namespace std; class String { public: String(char * str="") //不能strlen(NULL) :_str(new char [strlen(str ) + 1]) { strcpy(_str, str); } String(const String &s) :_str(NULL ) { String tmp(s ._str); swap(_str,tmp._str); } //String& operator=(const String& s) //{ // if (this != &s) // { // String tmp(s._str); // swap(_str, tmp._str); // } // return *this; //} String& operator=(String s) //优化 (s不能加引用,否则会改变实参的值)(这里的s是实参的一份拷贝) { swap(_str, s._str); return *this ; } char* CStr() { return _str; } ~String() { delete[] _str; } private: char* _str; }; void Test() { String s1("aaaaa" ); cout << s1.CStr() << endl; String s2(s1); cout << s2.CStr() << endl; String s3 = s1; s3= s2; cout << s3.CStr() << endl; String s4; // s4 = s1; cout << s4.CStr() << endl; } int main() { Test(); system("pause" ); return 0; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- C#中使用DataContractSerializer类实现深拷贝操作示例
- 一道sql面试题附答案
- PostgreSQL ERROR: invalid escape string 解决办法
- C# 超高面试题收集整理
- C#中4种深拷贝方法介绍
- 简单谈谈C#中深拷贝、浅拷贝
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- 浅拷贝和深拷贝深入理解(shallow copy VS deep copy)