C++ Primer : 第十二章 : 动态内存之shared_ptr类实例:StrBlob类
来源:互联网 发布:歌华有线网络 编辑:程序博客网 时间:2024/06/04 00:20
StrBlob是一个管理string的类,借助标准库容器vector,以及动态内存管理类shared_ptr,我们将vector保存在动态内存里,这样就能在多个对象之间共享内存。
定义StrBlob类:
#include <iostream>#include <stdexcept>#include <memory>#include <vector>#include <string>#include <initializer_list>#include <utility>#include <stdexcept> // for out_of_rangeclass 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;}
0 0
- C++ Primer : 第十二章 : 动态内存之shared_ptr类实例:StrBlob类
- C++ Primer : 第十二章 : 动态内存之shared_ptr类
- C++ Primer : 第十二章 : 动态内存之shared_ptr与new的结合使用、智能指针异常
- C++ Primer : 第十二章 : 动态内存之allocator类
- c++primer第五版第十二章12.20习题用一个StrBlobPtr打印出StrBlob中的元素
- 【c++ primer】第十二章 类和动态内存分配
- C++ Primer : 第十二章 : 动态内存之动态数组
- c++ primer 第五版 StrBlob类(p404)
- 《C++primer(第五版)》学习之路-第十二章:动态内存
- C++ Primer : 第十二章 : 动态内存之unique_ptr和weak_ptr
- C++ Primer : 第十二章 : 动态内存之动态内存管理(new和delete)
- c++primer第十二章类12.1
- c++primer第十二章类12.13
- C++ Primer Plus学习:第十二章 类和动态内存(2)
- C++ Primer Plus学习:第十二章 类和动态内存(1)
- C++ Primer Plus学习:第十二章 类和动态内存(3)
- 2012/1/27 《C++ Primer Plus》第十二章:类和动态内存分配 学习笔记
- c++ primer plus第十二章-动态内存和类、复制构造函数
- Linux 常用命令基础入门二
- 技术的价值
- 设计模式--命令模式
- 接口自动化测试用例分布统计
- C++智能指针类模板实例
- C++ Primer : 第十二章 : 动态内存之shared_ptr类实例:StrBlob类
- http statusCode(状态码) 200、300、400、500序列
- 想发起一个开源代码查查网的公益事情
- 已经破解好的Quartus软件,license为什么会突然失效
- ListView简单使用
- cocos2dx之GAF
- 10 个免费的服务器监控工具
- Canvas translate,scale,rotate
- 决定如何开发你的WordPress主题框架