题目:编写一个StrBlob类,使多个对象能共享相同的底层数据(即某个对象被销毁后,若仍有对象使用其数据,则不会销毁底层数据),并且对象要能进行一定的读写操作。
为了实现数据共享,我们使用一个shared_ptr管理动态分配的vector,只有某个对象的引用次数为0时,智能指针才会将其数据自动销毁。读写操作:定义size()、empty()、push_back()、pop_back()、front()、back()等函数。
代码:
#include<iostream>
#include<vector>
#include<string>
#include<memory>
using namespace std;
class StrBlob {
public:
using size_type = vector<string>::size_type;
StrBlob();
StrBlob(initializer_list<string> il); //可变形参初始化
size_type size() const { return data->size(); }
bool empty() const { return data->empty(); }
void push_back(const string &str) { data->push_back(str); }
void pop_back();
string& front() { return do_front(); }
const string& front() const { return do_front(); } //基于const的重载
string& back() { return d