C++ Primer 编写StrBlob类(含相关问题)

本文介绍了如何使用C++ Primer中的StrBlob类,利用shared_ptr实现对象间的底层数据共享。讨论了为何在StrBlob类中使用内联函数do_front()和do_back()以提高代码复用和效率。同时,针对练习12.3,解释了为何StrBlob不需要const版本的push_back()和pop_back(),因为这会违反常量对象不应被修改的逻辑。最后,解释了在check函数中无需检查i大于0的原因,因为i是unsigned类型,确保其非负。
摘要由CSDN通过智能技术生成

题目:编写一个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值