为string类添加一个赋值运算符函数
2016-05-06 01:24
351 查看
面试中经常会被要求写一个string类,其实通过写string类就可以看出来一个人对C++的掌握能力。其实写string类主要就是看赋值运算符的重载函数的写法。在这里我自己实现了两种。如果大家有更好的办法请给我留言。
第二种方法是先构造了一个临时变量。然后通过临时变量来将值进行交换,且之后出了该作用域,临时变量会被析构了。不需要再为没有new成功却先delete的方面去考虑。这样的做法是即简洁又安全。
#include <iostream> #include <string.h> #include <assert.h> using namespace std; class cstring { public: cstring(char* data = "\0") { m_data = new char[strlen(data)+1]; strcpy(m_data,data); } ~cstring() { delete []m_data; } cstring(const cstring &str) { m_data = new char[strlen(str.m_data)+1]; assert(m_data != NULL); strcpy(m_data,str.m_data); } // cstring& operator=(const cstring &str) //一般方法。 // { // if (this != &str) // { // delete []m_data; // m_data = NULL; // this->m_data = new char[strlen(str.m_data)+1]; // strcpy(this->m_data,str.m_data); // } // return *this; // } cstring& operator=(const cstring &str) { if (this != &str) { cstring tmp(str); char* ptmp = tmp.m_data; tmp.m_data = m_data; m_data = ptmp;//交换两个对象的两个值通过析构临时对象的成员变量来析构本身的变量。 } return *this; } void show() { cout<<this->m_data<<endl; } private: char* m_data; }; int main() { cstring str("srtff"); cstring fg(str); cstring df; df = fg; str.show(); fg.show(); df.show(); return 0; }第一种一般方法主要过程就是,首先释放掉本来的内存空间,然后为被赋值的对象重新开辟一个和赋值的对象同样大小的空间,进而将字符串拷贝进去。但是这种方法有一个缺点就是如果new失败了。而且已经将原本的内容delete掉了,所以程序面对的只能是崩溃,不是一个安全且健壮的程序所能展现的。
第二种方法是先构造了一个临时变量。然后通过临时变量来将值进行交换,且之后出了该作用域,临时变量会被析构了。不需要再为没有new成功却先delete的方面去考虑。这样的做法是即简洁又安全。
相关文章推荐
- CSS3特殊效果
- Linux初级 文件处理命令
- c++ 课堂作业(1)
- CSS总结
- linux--函数劫持--基于LD_PRELOAD
- windows下tomcat日志输出至文件
- CSS框模型,浮动,定位以及其他属性
- CSS基础知识点总结
- Mac hook苹果系统进程监控劫持
- touch事件的多点触控案例和获取touch的属性
- Html基础知识点
- C++第一次课堂作业 circle
- S:SELECT value 表达式
- 面向对象程序设计的基本概念和特征
- 1
- 深入理解数据结构之链表
- 自定义注解和注解的相关使用
- 【Redis】四 数据类型 String
- C++ 第一次课堂作业
- C++ 第一次课堂作业