Ex 14.28 problem

Author: FiyealCreated Mar 6, 2023Updated Mar 6, 2023

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.

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

Attached check function code.

cpp
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;
}