《c++primer》中关于重载操作符->的疑问?

发布于 2022-09-04 06:50:53 字数 624 浏览 20 评论 0

在《c++primer第五版》的p504中关于重载->的代码部分

class StrBlobPtr{
public:
    std::string& operator* () const 
    {
        auto p=check(curr,"dereference past end");
        return (*p)[curr];
    }
    std::string* operator->()const
    {
        return & this->operator*();
    }
private:
    share_ptr<vector<string>>
        check(size_t,const string&)const;
    weak_ptr<vector<string>>wptr;
    size_t curr;
}

在函数operator->中,语句return & this->operator*();中调用->操作符,但是调用这个函数的对象不应该正是StrBlobPtr对象吗?那样this指针指向的是该类的对象,不会造成死循环吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇纵 2022-09-11 06:50:53

return & this->operator*();中调用->操作符是通过指针调用,因此是原始的没有重载的含义,而operator->必须通过对象来调用!因此不会出现死循环。
StrBlobPtr a;
StrBlobPtr pa = &a;

a->empty(); //调用重载函数,因为a是对象

pa->curr; //出错,因为pa为指针,->为原始含义,因此引用了私有成员

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文