c++的一个常见的面试题即写一个简单的string类,这个类中应该有着必要的构造函数、复制构造函数、赋值操作符、析构函数等功能,需要很好的处理内存的问题。
赋值操作符的多种写法:
1.一般的经典写法为(没有考虑异常处理):
这里还要注意的是:令赋值操作符返回一个reference to *this
:详细见《effective c++》
String& String::operator=(const String& rhs) {
if (this == &rhs) {
return *this;
}
delete[]_data;
_data = new char[rhs.size() + 1];
strcpy(_data, rhs._data);
return *this
}
这里在进行new的过程中可能会出现异常,因为其内存不够。
2. Copy and swap技术
void Swap(String rhs) {
std::swap(_data, rhs._data);
}
String& operator=(const String& rhs) {
String temp(rhs); //利用复制构造函数
Swap(rhs);
return *this;
}
3.传值
String& operator=(String rhs) { //这里是传值,只是副本
Swap(rhs);
return *this;
}
4.C++11的右值引用
String& operator= (String&& rhs) {
Swap(rhs);
return *this;
}
其余的感觉就没有什么难点了,完整代码如下:
//Date : 2016.11.6
//Autore : yqtao
/*
string 类的实现
*/
#ifndef STRING_H
#define STRING_H
#include<iostream>
using namespace std;
class String {
private:
char* _data;
public:
String(const char* str =