C++ Primer : 第十二章 : 动态内存之shared_ptr类实例:StrBlob类
2015-08-21 09:55
357 查看
StrBlob是一个管理string的类,借助标准库容器vector,以及动态内存管理类shared_ptr,我们将vector保存在动态内存里,这样就能在多个对象之间共享内存。
定义StrBlob类:
StrBlob的实现:
定义StrBlob类:
#include <iostream> #include <stdexcept> #include <memory> #include <vector> #include <string> #include <initializer_list> #include <utility> #include <stdexcept> // for out_of_range class StrBlob { public: typedef std::vector<std::string>::size_type size_type; typedef std::shared_ptr<std::vector<std::string>> shdptrStrVec; StrBlob(); StrBlob(std::initializer_list<std::string> il); StrBlob(std::vector<std::string>::iterator& left, std::vector<std::string>::iterator& right); StrBlob(std::vector<std::string>& vec); size_type size() const { return data->size(); } bool empty() const { return data->empty();} void push_back(const std::string& str ){ data->push_back(str);} void pop_back(); // 访问元素 std::string& front(); std::string& back(); // const 版本 const std::string& front() const; const std::string& back() const; std::string& at(size_type i){ return data->at(i); } StrBlob& operator = (StrBlob& blob); private: std::shared_ptr<std::vector<std::string>> data; void check(size_type i, const std::string& msg) const; };
StrBlob的实现:
StrBlob::StrBlob() : data(std::make_shared<std::vector<std::string>>()) { } StrBlob::StrBlob(std::initializer_list<std::string> il) : data(std::make_shared<std::vector<std::string>> (il)) { } StrBlob::StrBlob(std::vector<std::string>::iterator& left, std::vector<std::string>::iterator& right) : data(std::make_shared<std::vector<std::string>>(left, right)){ } StrBlob::StrBlob(std::vector<std::string>& vec) : data(std::make_shared<std::vector<std::string>>(vec)) { } void StrBlob::check(size_type i, const std::string& msg) const { if (i >= data->size()) throw std::out_of_range(msg); } std::string& StrBlob::front() { check(0, ""); return data->front(); } std::string& StrBlob::back() { check(0, ""); return data->back(); } const std::string& StrBlob::front() const { check(0, ""); return data->front(); } const std::string& StrBlob::back() const { check(0, ""); return data->back(); } void StrBlob::pop_back() { check(0, ""); data->pop_back(); } StrBlob& StrBlob::operator =(StrBlob& blob) { this->data = blob.data; return *this; }
相关文章推荐
- C++ map的基本操作和使用
- [iOS]C语言技术视频-17-指针变量高级用法练习二(使用堆内存完成链表结构的存储)
- [iOS]C语言技术视频-16-指针变量高级用法(堆栈内存)
- [iOS]C语言技术视频-15-指针变量高级用法练习一(函数指针完成动态排序)
- c++中无名命名空间的使用
- 井字棋
- [iOS]C语言技术视频-14-指针变量高级用法(函数指针)
- [iOS]C语言技术视频-13-指针变量练习三(结构体指针变量)
- [iOS]C语言技术视频-12-指针变量练习二(数组打印)
- C语言中的const、extern及结构体、联合体的定义
- [iOS]C语言技术视频-11-指针变量练习一(交换值)
- [iOS]C语言技术视频-10-指针变量
- [iOS]C语言技术视频-09-枚举的定义
- [iOS]C语言技术视频-08-结构体的定义
- [iOS]C语言技术视频-07-函数的定义
- c++与webserver通讯总结
- C++11 Lambda表达式实例2
- [iOS]C语言技术视频-06-程序循环结构(for{})
- [iOS]C语言技术视频-05-程序循环结构(do{}while();)
- C++停止服务及其依赖项