gpt4 book ai didi

c++ - 为什么重载 operator->() 有用?

转载 作者:太空狗 更新时间:2023-10-29 23:37:43 29 4
gpt4 key购买 nike

我在C++ Programming Language的书上看到了下面的例子

class Ptr {
X* operator->( );
};

voide f(Ptr p)
{
p->m=7;
X* q1 = p->;
X* q2 = p.operator->();
}

该书声称1) Ptr 类的对象可用于访问 X 类的成员,其方式与使用指针的方式非常相似。2)对象p到指针p.operator->()的转换不依赖于m指向的成员。这就是 operator->( ) 是一元后缀运算符的意义。

对于第一点,我不明白为什么要这样设计,或者在什么场景下应该使用这样的设计。对于第二点,我对作者想要传达的信息感到困惑。

谢谢。

最佳答案

当实现行为类似于(伪装成)指针的对象时,此运算符会重载。

一个很好的例子是 boost::shared_ptr ,这是一个经典的引用计数指针,当所有指针都被销毁时,它会自动删除指向的对象。人们出于各种原因实现了无数其他类似的“智能指针”对象。

(而且,正如所指出的,STL 迭代器也使用它来表现得像指针,允许像 it->method();it->data; 这样的语法)

关于c++ - 为什么重载 operator->() 有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226558/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com