String类代码
来源:互联网 发布:windows latex 实时 编辑:程序博客网 时间:2024/06/09 14:37
#include <iostream>#include <string.h>#include <assert.h>using namespace std;class String { public: String(const char *str = NULL); //这个地方经常会忽略掉const 和 =NULL String(const String &other); String &operator = (const String &other); ~String(void); private: char *m_data;};String::String(const char *str){ if(str == NULL) { m_data = new char[1]; m_data[0] = '\0'; } else { m_data = new char[strlen(str) + 1]; strcpy(m_data, str); }}String::String(const String &other){ assert(other.m_data != NULL); m_data = new char[strlen(other.m_data) + 1]; strcpy(m_data, other.m_data);}String & String::operator=(const String &other){ assert(other.m_data != NULL); if(&other == this) //这里很容易丢掉,而且注意不是other == *this,没有定义"=="操作符呢还 return *this; delete m_data; m_data = new char[strlen(other.m_data) + 1]; strcpy(m_data, other.m_data); return *this;}String::~String(void){ delete m_data;}int main(){ return 0;}
这里,对于一个string类,构造出来的m_data至少有一个'\0',而不是空指针,这样可以避免出现访问空指针的情况。也看见过为m_data为空的写法,感觉不如这样严谨。而且如果允许m_data为空,那么在析构函数析构,赋值函数delete m_data时都必须要检查下m_data是否为空指针。
还有拷贝构造函数的问题,当成员变量有指针的时候,一般要手写拷贝构造函数,否则会发生浅拷贝,这个时候,两个对象的指针成员会指向同一块内存空间,为了避免发生这种现象,就要手写拷贝构造函数。像String类的拷贝构造函数。
- String类代码
- String类学习代码
- System.String 类的实现代码
- C++类String的实现代码
- 第一次用string类,贴一下代码
- String类的函数体实现代码
- 代码解析String原理
- string的常用代码
- String 题解+代码
- C++随手代码收藏 自定义实现 String 类
- 闪存散列代码的String类实现
- c++中string类的详解以及代码示例
- MD5加密,java工具类 String 转变成MD5 String 详细代码,工具类Android开发必备
- 一个String代码,便于深入理解String
- 基础操作String的代码
- 网页代码string转HtmlDocument
- SimpleDateFormat和String.format代码
- [Foundation] 简写代码 string literal
- Ext开发过程中注意重点
- XML注释问题
- JVM内存配置详解
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
- String类代码
- 番茄工作法—pomtime软件使用
- dbus-Python的使用
- 在其他线程中访问UI线程
- Objective-C语法之集合对象的那些事儿(九)
- 精益用户体验(UX):摆脱只注重结果的工作(留意互动机构的区别之处)
- Objective-C语法之集合对象的那些事儿(九)
- LTIB常用命令详解
- Android支持的长度单位(转载)