c++ - How smart pointer weak_ptr is bound to shared_ptr in this case? -


here exercise c++ primer 5th edition:

exercise 12.20: write program reads input file line @ time strblob , uses strblobptr print each element in strblob.

class strblob {     friend class strblobptr; public:     strblob(): data(make_shared<vector<string>>()) { }     strblob(initializer_list<string> il):          data(make_shared<vector<string>>(il)) { }     int 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();      strblobptr begin();     strblobptr end(); private:     shared_ptr<vector<string>> data;     void check(int i, const string& msg) const; };  class strblobptr { public:     strblobptr(): curr(0){ }     strblobptr(strblob &a, size_t sz = 0):             wptr(a.data), curr(sz) { }     string& deref() const;     strblobptr& incr(); private:     shared_ptr<vector<string>> check(size_t i, const string& msg) const;     weak_ptr<vector<string>> wptr;     size_t curr; };  strblobptr strblob::begin()  {     return strblobptr(*this);  }  strblobptr strblob::end() {     return strblobptr(*this, data->size()); } 

i don't understand in how smart pointer wptr bound data member of strblob in strblobptr strblob::begin calling default constructor function.

while in strblobptr strblob::end(), strblobptr(strblob &a, size_t sz = 0):wptr(a.data), curr(sz) { } called explicitly , wptr bound a.data.

as @tetechhelp answered

strblob::begin doesn't call default constructor (i.e. ctor 0 parameters), calls overloaded constructor default parameter (sz in case defaulted 0); in begin function return strblobptr(*this); same calling return strblobptr(*this, 0);


Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -