C++面试题(二)——实现一个String类

实现一个自己的String类是一道考验C++基础知识的好题。
至少要能实现以下:构造函数、析构函数、拷贝构造函数(copy constructor)、重载赋值操作符(copy assignment operator)。首先是至少能够准确的写出这几个函数的声明。

class String{
public:
	String();
	String(const char *);
	String(String rhs);
	String& operator = (String rhs);
private:
	char* data_;
}	

其次,老版本的拷贝构造函数和重载赋值操作符时,有几点需要注意的是:判断自己赋值给自己和异常安全性。通过使用swap可以简化方法。下面是老版本的拷贝构造函数的实现,new的时候有可能会抛出异常。

   String::String(String rhs){
   	std::swap(data_,rhs.data_);
   }
   
   String::String& operator = (Sring rhs){
   	std::swap(data_,rhs.data_);
   	return *this;
  }

String::~String(): 
delete [] data_;   	

}

使用swap的拷贝构造函数,通过swap将临时变量rhs中的数据保存到了data_中,同时data_中的数据拷贝到了临时变量中,在函数返回时会被自动释放。一举两得,也不用担心有异常发生了。

 String::String(String rhs){
 	std::swap(data_,rhs.data_);
 }
String::String& operator = (String rhs){
	std::swap(data_,rhs.data_);
	return *this;
}

String::String():data_ = new char[1]{
	*data_ = '\0';
}		
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值