smart_ptr str_Blob

#include<cstring>
#include<vector>
#include<memory>
#include<stdexcept>
#include<iostream>
using namespace std;

class strBlob {
public:
	typedef vector<string>::size_type size_type;

	strBlob();
	strBlob(initializer_list<string>il);
	size_type size() const { return data->size(); }
	bool empty()const { return data->empty(); }

	//add & delete 
	void push_back(const string& s) { data->push_back(s); }
	void pop_back();

	//access
	string& front();
	string& back();

private:
	//使用标准库容器vector来管理元素string
	//为实现数据共享,使用shared_ptr来管理动态分配的vector
	//若直接使用vector,离开作用域时,vector将被销毁,数据也被销毁
	shared_ptr<vector<string>>data;

	//如果data[i]不合法,抛出异常。元素访问成员函数在访问成员之前要检查元素是否存在
	//msg将参数传递给异常处理程序
	void check(size_type i, const string& msg)const;
};

strBlob::strBlob():data(make_shared<vector<string>>()){}
strBlob::strBlob(initializer_list<string>il):data(make_shared<vector<string>>(il)){}

void strBlob::check(size_type i, const string& msg)const {
	if (i >= data->size())
		throw out_of_range(msg);
}

void strBlob::pop_back() {
	check(0, "pop_back on empty strBlob");
	return data->pop_back();
}

string& strBlob::front() {
	check(0, "front on empty strBlob");
	return data->front();
}

string& strBlob::back() {
	check(0, "back on empty strBlob");
	return data->back();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值