【C++ Primer | 12】動態內存與智能指針
阿新 • • 發佈:2018-06-28
throw IV def push tor pty endif con name
#ifndef MY_STRBLOB_H #define MY_STRBLOB_H #include<iostream> #include<vector> #include<memory> #include<initializer_list> 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(); } void push_back(const string &t) { data->push_back(t); } void pop_back(); string& front(); string back(); private: shared_ptr<vector<string>> data; 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(); } void StrBlob::pop_back() { check(0, "pop_back on empty StrBlob"); 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(); } #endif
【C++ Primer | 12】動態內存與智能指針