Mooophy/Cpp-Primer

Ex 14.28 problem

Fiyeal opened this issue · 0 comments

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