Mooophy / Cpp-Primer

C++ Primer 5 answers
Creative Commons Zero v1.0 Universal
8.11k stars 3k forks source link

Ex 14.28 problem #827

Open Fiyeal opened 1 year ago

Fiyeal commented 1 year ago

Hello. I think it is OK as a result of StrBlobPtr::operator+=(size_t n) to get a trailing pointer. So maybe it is better to use the code below.

inline StrBlobPtr& StrBlobPtr::operator+=(size_t n)
{
    curr += n;
    check(curr - 1, "increment past end of StrBlobPtr"); // changed
    return *this;
}

Attached check function code.

inline shared_ptr<vector<string>> StrBlobPtr::check(size_t i, const string &msg) const
{
    auto ret = wptr.lock();
    if (!ret) throw std::runtime_error("unbound StrBlobPtr");
    if (i >= ret->size()) throw std::out_of_range(msg);
    return ret;
}