string类实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string类实现相关的知识,希望对你有一定的参考价值。
string类
写法一:
class String { public: String()//构造函数,当str为空字符串时 { _str = new char[1]; *_str = ‘\0‘; cout << "string()" << endl; } String(char* str)//构造函数 :_str(new char[strlen(str + 1)])//strlen求字符串大小,不包括‘\0’,故+1留下/0空间 { strcpy(_str, str); cout << "构造" << endl; } ~String()//析构函数 { delete[]_str;//new[]要用delete[]释放 cout << "析构" << endl; } String(const String& str)//拷贝构造函数 :_str(new char[strlen(str._str) + 1]) { strcpy(_str, str._str); cout << "拷贝" << endl; } String& operator=(const String& str)//重载= { if (this != &str)//判断自赋值 { delete[]_str;//释放原空间 _str = new char[strlen(str._str) + 1];//开辟新空间 strcpy(_str, str._str);//复制 return *this; } cout << "重载" << endl; } private: char* _str; };
写法二:
简化 class String { public: String()//构造函数,当str为空字符串时 { _str = new char[1]; *_str = ‘\0‘; cout << "string()" << endl; } String(char* str)//构造函数 :_str(new char[strlen(str + 1)])//strlen求字符串大小,不包括‘\0’,故+1留下/0空间 { strcpy(_str, str); cout << "构造" << endl; } ~String()//析构函数 { delete[]_str;//new[]要用delete[]释放 cout << "析构" << endl; } String(const String& str)//拷贝构造函数 :_str(NULL) { String tmp(str._str); swap(_str, tmp._str); } //String& operator=(const String& str)//写法一 //{ // if (this != &str)//判断自赋值 // { // String tmp(_str); // swap(_str, tmp._str); // } // cout << "重载" << endl; // return*this; //} String& operator=(String str)//写法二 { swap(_str, str._str); return *this; } bool operator==(const String& s) { } private: char* _str; };
写法三:
class String { public: String(char*str="") :_str(new char[strlen(str)+5]) { *(int*)_str = 1; _str += 4; strcpy(_str, str); } ~String() { if (_str != NULL) { if (--*(int*)(_str - 4)) { delete[](_str - 4); } } } String(const String& str) :_str(str._str) { ++*(int*)(_str - 4); } String& operator=(const String& str) { if (this != &str)//自赋值检查 { if (--*(int*)(_str - 4) == 0) { delete[](_str - 4); } _str = str._str; ++*(int*)(_str - 4); } return *this; } private: char *_str; };
本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1750023
以上是关于string类实现的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段
片段中 ListView 的 setOnItemClickListener
片段中ListView的setOnItemClickListener
Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段